在做nlp任务时,我们常常和语音结合起来,即将语音转为文本,然后将文本做一系列任务。
但是语音转换成文本,肯定有一系列错误。
我们可以文本纠错
文本纠错见我的另一篇博客。
中文文本纠错 算例实现(有算例完整代码)
这篇博客中提到要准备一个 正确词的txt。
那究竟什么是正确词,对于特殊任务怎么办,
于是我们得首先发现语音识别对那些词容易识别错误。
然后将那些经常错误的词对于的正确词添加进文本纠错系统里的正确词txt中。
然后再文本纠错。

本文讲解如何发现语音转换中 错误词和正确词

代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu
# @Date  : 2020/10/6
#endcoding: utf-8import numpy as npdef correct_error(sentence1,sentence2):""":param sentence1: 正确文本:param sentence2:语音转换的文本:return: 正确字周围的词数组,错误字周围的词数组"""correct = []for i in range(len(sentence1)):#bianif sentence1[i] not in sentence2:correct1 = sentence1[i - 2:i + 2]  # 存在错误的正确字,附近的词 (i - 2:i + 2,我取长度为4即一个成语的长度correct.append(correct1)error = []for j in range(len(sentence2)):if sentence2[j] not in sentence1:error1 = sentence2[j - 2:j + 2]  # 存在错误的错误字,附近的词error.append(error1)return correct,error#余弦距离计算相似度
def cosine_similarity(sentence1: str, sentence2: str) -> float:""":param sentence1: 正确词:param sentence2:错误词:return: 两个词 的相似度"""seg1 = [word for word in sentence1]seg2 = [word for word in sentence2]word_list = list(set([word for word in seg1 + seg2]))#建立词库word_count_vec_1 = []word_count_vec_2 = []for word in word_list:word_count_vec_1.append(seg1.count(word))#文本1统计在词典里出现词的次数word_count_vec_2.append(seg2.count(word))#文本2统计在词典里出现词的次数vec_1 = np.array(word_count_vec_1)vec_2 = np.array(word_count_vec_2)#余弦公式num = vec_1.dot(vec_2.T)denom = np.linalg.norm(vec_1) * np.linalg.norm(vec_2)cos = num / denomsim = cos#return simdef result(sentence1,sentence2):correct,error=correct_error(sentence1,sentence2)finally_result=[]#存放[[正确词1,错误词1],[正确词2,错误词2]]similarity = []for str1 in correct:#遍历每一个候选正确词for str2 in error:#遍历每一个候选错误词similarity1 = cosine_similarity(str1, str2)#计算候选正确词 与候选错误词之间的相似度similarity.append(similarity1)#相似度存放进数组print('相似度',similarity)if max(similarity)==0.0:breakelse:max_index = similarity.index(max(similarity))  # 相似度最大的错误词所在索引# print(str1, error[max_index])finally_result.append([str1, error[max_index]])  # 存放【正确词i,错误词i】similarity = []  # 匹配掉了一个正确词,清空相似度数组用于存放下一个正确词和各个错误词之间的相似度return finally_resultif __name__=='__main__':sentence1 = "重庆是中国的四大火炉之一,风景秀丽,是人间天堂。 "sentence2 = "重庆是中国的四大火炉之一,风景锈丽,是人间天棠。"print('正确文本sentence1: ',sentence1)print('语音文本sentence2:',sentence2)#sentence1=input('请输入正确文本:')#sentence2=input('请输入语音文本:')correct, error=correct_error(sentence1,sentence2)print('corret',correct)print('error',error)finally_result=result(sentence1,sentence2)print(finally_result)

结果

第一种情况:
给出一段文本,说话的人照着文本说完全部。(即不缺字少字)

第二种情况:
给出一段文本,说话的人少读了(少字)

少读部分不参与计算(即人间天堂没有经过语音,不能直接认为有错)

第三种情况:
给出一段文本,说话的人多读了(多字)
多读部分不参与计算(即人间天堂 经过语音,即使我明知道有错 ,但多读部分我们并不关心。不认为有错)

在这个代码的基础上,可以自己结合业务修改代码。用于批量处理数据。然后整理成表格,一列正确候选词,一列错误候选词。
然后筛选高频词。
还需要点人工处理(因为如果一个字出现语音转换错误,那么它会出现多次,并且在表格中是相邻的)
人为删除一些重复的吧。

对比
原始人工

给出一个表格,表格里有很多文本,成百上千。
两列数据,第一列正确文本,第二列语音转换文本。
一个文本长度几十字,几百字。
人得读完一条正确文本,再读对应的语音文本,寻找正确词和错误词,再复制到另一个表格中。

现在
应用程序,直接生成 正确词-错误词 表格
表格共两列
第一列正确字词,第二列错误字词。
人需要做的就是 将相邻几行删除只保留一行()
如图所示,删除相邻多余的庆,信访

时间成本缩小几倍。

(此图是我很久以前用其他代码跑出来的结果,现在也忘啦那份代码写的是哈,数据集也丢啦,总之这个代码跑出来的结果和此图类似,自己删除相邻重复项就可以。)

因为原始数据肯定有很多文本,信访肯定在不同文本中出现,
在结果表格中,信访可能在不同位置出现,然后可以应用表格统计词频。
最后发现高频错误词。
将结果写入文本纠错的 正确字词txt中,进行文本纠错。
文本纠错前面有链接,不再发啦。

此方法是我自己想的,可能不是很好,如果你有更好的方法请告诉我,让我学习一下。


电气专业的计算机萌新:余登武。
写博文不容易。如果你觉得本文对你有用,请点个赞支持下。

用100行python代码发现语音识别文本错误词,并将结果和正确词一一对应相关推荐

  1. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  2. 100行python代码做一个程序_100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  3. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  4. python模拟别人说话的声音_如何用100行Python代码做出魔性声控游戏“八分音符酱”...

    最近几天,一款魔性的小游戏在微博上刷屏了,各大平台的主播也纷纷如感染病毒一样直播自己怎么玩这个游戏(被游戏玩). 这个游戏叫做<不要停!八分音符酱♪>.它是一款来自岛国的恶搞游戏,主角是一 ...

  5. 100行python代码实现五子棋-教程

    五子棋是是一种两人对弈的纯策略型棋类游戏. 五子棋有两种玩法.玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜.玩法二:自己形成五子连线就替换对方任意一枚棋子.被 ...

  6. 几行Python代码帮你生成精美词云图

    近年来,互联网.新媒体等行业报告中经常会看到一些精美的词云图.它的原理其实比较简单,主要是对文章内容进行分词,统计各个词出现的次数,然后根据出现的次数,设置显示样式,例如大小.颜色等,从而使读者快速领 ...

  7. python实现新闻网站_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源;用 ...

  8. 计算器百分号如何用代码实现_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?...

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源:用 ...

  9. 再见PDF提取收费!我用100行Python代码搞定!

    点上方"菜鸟学Python",选择"星标" 第471篇原创干货,第一时间送达 大家在日常的工作和学习过程中,都少不了与PDF文件打交道,很多的小伙伴都面临着将P ...

最新文章

  1. 图灵2010.07书讯
  2. 数据蒋堂 | 大数据技术的4个E
  3. java字符串逐个分解_改进JAVA字符串分解的方法
  4. STM32F4 编程手册学习1_编程模型
  5. 技术实践丨React Native 项目 Web 端同构
  6. mfc opengl 三维地形图_衢州三维动画制作传媒企业哪家好2020收费
  7. linux下启动应用程序,RedHat Linux 9下启动应用程序
  8. 谷歌开源容器镜像的签名和验证工具 Cosign
  9. C++ 如何画橡皮线
  10. Failed to run the WC DB work queue associated with 错误的解决
  11. 关于java前端与后端的技术和工资对比!
  12. 8086CPU时序概念
  13. C#基于FFmpeg实现录屏功能
  14. 一个vue的日历组件ele-calendar
  15. 关于最短剩余时间优先算法-进程调度模拟【C++】
  16. c语言编码rna翻译,哪位大牛有哈夫曼编码的C语言源程序,麻烦帮帮忙啦!
  17. matlab 替换字符 数字,使用正则表达式替换文本
  18. camera驱动电源配置_Camera driverV4L2驱动架构介绍
  19. Xs and Os Referee
  20. [codeforces 1343B] Balanced Array 奇+奇=偶,奇+偶=奇,偶+偶=偶

热门文章

  1. 迷宫问题让你深度理解递归(回溯)
  2. Maven之依赖管理
  3. Linux中的cp命令和mv命令
  4. 丑数 Humble Numbers
  5. python实现程序重启_如何让python程序重新启动到某一行?
  6. android assets文件夹资源的访问
  7. 求给定数组子数组中最接近0的和
  8. java ajax实现分页代码,jQuery实现分页功能(含ajax请求、后台数据、附完整demo)...
  9. 金融专业计算机大几可以不学,大学选专业,只要明白4个档次,3个原则,基本不会有太大的问题...
  10. 归并排序 Merge Sort