1、实验内容利用统计语言模型实现拼音汉字转换

输入:拼音串,输出:对应的汉字串

给定10000字的测试语料,测试音字转换的准确率

针对音字转换结果中存在的问题给出具体分析

以图表的形式表示上述结果

2、实验要求和目的自己准备词表

自己准备语料,规模应在一千万字以上

编程环境、汉字编码不限

3、实验环境windows 10

Python 3.7.0

pypinyin 0.34.0

4、程序主要算法

4.1 HMM(隐马尔科夫模型)

马尔科夫假设

随机过程中各个状态St的概率分布,只与它的前一个状态St-1有关,即P(St|S1,S2,S3,…,St-1)= P(St|St-1)。

符合马尔可夫假设的随机过程称为马尔可夫过程,也称为马尔可夫链。在隐马尔科夫模型中,含有两条马尔科夫链:

其中,S1,S2,S3,S4为隐含状态,O1,O2,O3,O4为观察到的序列在拼音转汉字实验中,拼音为观察的输出序列,而对应的汉字则为产生该输出的状态序列。拼音转汉字过程是寻找一个拼音序列所对应的汉字序列,并且该汉字序列的产生概率最大。我们可以将其描述为以下过程:给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列。该过程可以用维特比算法进行求解。

4.2 Viterbi算法

维特比算法运用了动态规划的思想,算法过程描述如下:

如果概率最大的路径P(或叫最短路径)经过某个点,比如下图中的X22,那么这条路径上从起始点S到X22的这一段子路径Q,一定是S到X22之间的最短路径。否则,用S到X22的最短路径R替代Q,便构成了一条比P更短的路径,这显然是矛盾的。

从S到E的路径必定经过第i时刻的某个状态,假定第i时刻有k个状态,那么如果记录了从S到第i个状态的所有k个节点的最短路径,最终的最短路径必经过其中的一条。这样,在任何时刻,只需要考虑非常有限条最短路径即可。

结合上述两点,假定当我们从状态i进入状态i+1时,从S到状态i上各个节点的最短路径已经找到,并且记录在这些节点上,那么在计算从起点S到前一个状态i所有的k个结点的最短路径,以及从这k个节点到Xi+1,j的距离即可。

Viterbi算法可以有效求出隐马尔科夫模型的最短路径(最大概率),且时间复杂度为(在拼音转汉字中,N为拼音个数,D为每个拼音对应的汉字个数,由于每个拼音对应的汉字个数是一定的,可视为常数,因此时间复杂度为O(N),满足要求)

5、实验过程

5.1 训练模型

训练集与测试集语料的格式如下:

每一行为单独的一句,不含有汉字以外的符号。在训练过程中,我们需要先得到每个字对应的拼音,然后根据对应关系获取字典,转移矩阵以及各汉字的发射概率,计算过程如下:

通过pypinying,获取每个句子对应的拼音:

PinYin=lazy_pinyin(words,errors="ignore")

典生成及发射概率计算:统计每个拼音所对应的所有汉字,并统计其出现频率,除以该拼音对应的汉字的总数,并存为json文件

生成的字典如下:

若在句子S中,汉字A与B满足,则A的转移转移矩阵中必包含B。统计A,得到所有的B,并根据其各自出现的频率计算转移矩阵中对应的概率大小,并存为json文件.

生成的转移矩阵文件格式如下:

训练模型时,读取的训练的语料为resource文件夹下的sentence.txt文件,运行 pretreament.py 文件,会将生成的字典存入resource文件夹下的dictionary.json文件中,将生成的转移矩阵存入resource文件夹下的transfermatrix.json文件中。

5.2 根据得到的模型完成拼音到汉字的转换

加载dictionary.json与transfermatrix.json,获取字典与对应发射概率,以及转移矩阵。并通过维特比算法完成求解,求得具有最大概率的中文序列(具体代码见Viterbi.py文件代码)

运行Viterbi.py文件可以查看效果(也可以手动输入测试用例,如pythonViterbi.py “wo shi shei”)

5.3 读取测试样本

生成对应的拼音,并调用Viterbi.py中的viterbi方法获取每个拼音对应的汉字,并与原本的汉字进行对比,计算准确率。

运行testViterbi.py文件,可以完成测试,默认的测试样本为resource文件夹下的test.txt文件,也可以通过参数指定测试样本文件。如:pythontestViterbi.py “resouce/test.txt”。

当拼音有多组汉字与之对应时,可以显示多个预选项。(按概率从大到小选择)

6、实验结果

6.1 拼音转汉字测试

拼音

ha er bingong ye da xue ji suan ji ke xue yu ji shu xue yuan

汉字

['哈尔滨工业大学计算机科学与技术学院','哈尔滨工业大学计算机科学与技术学员','哈尔滨工业大学计算机科学与技术学原','哈尔滨工业大学计算机科学与技术学元','哈尔滨工业大学计算机科学与技术学园']

拼音

zhe shi yige ce shi

汉字

['这是一个侧是','这是一个测时','这是一个测事','这是一个测试','这是一个侧适']

拼音

pin yin shuru fa

汉字

['拼音数如发','拼音数如法','拼音数入罚','玭铟鉥洳乏','玭铟鉥洳阀']

6.2 利用测试样本进行准确率测试(所有备选项中转换正确最多的个数)备选项个数

准确率

1

0.7831163317294084

2

0.8022219077271441

3

0.8088734786300594

4

0.8121992640815171

当我们增加备选项时,可以看见,准确率有小幅度提高,因此,我们应当合理加入备选项。

6.3 结果分析

利用隐马尔科夫模型进行拼音转汉字是可行的,但是转换结果受到训练样本影响较大,语料的覆盖范围需要很广泛,否则在某些情况下结果较差。

在输入”zhe shi yi ge ce shi”时,由于训练样本中,“测试”一词出现的频率较低,因此,导致在将”zhe shi yi ge ce shi”转为汉字时,“这是一个测试”出现的概率也就偏低,与实际情况相反。因此,训练所用语料在选择时应当考虑全面。

在输入”pin yin shu ru fa”时,由于训练样本中没有“音输”两字相连的情况,因此,训练出的模型同样无法进行正确的转换。

7、实验结论和体会

在实现拼音转汉字时,所得结果受语料的影响较大。语料的覆盖应当要全面。同时,在面对不同需求时,我们应当用不同倾向的语料来进行训练,可以有效提高使用时的效率。

python数字转换拼音程序_课内资源 - 基于Python的拼音汉字转换程序相关推荐

  1. python+diango写酒店管理系统_课内资源 - 基于Python的Django框架实现的中式快餐厅管理信息系统网站...

    1 初步调研 随着餐饮业的连锁和国外餐饮巨头的进入,餐饮业的竞争将越来越激烈:要想在竞争中处于不败之地,必须在管理.服务等方面提高服务管理意识.面对当前餐饮业普遍的产业化程度低,管理手段.管理技术落后 ...

  2. python迷宫小游戏代码_课内资源 - 基于python实现的迷宫游戏

    一.项目概述与编译环境 本次大作业选题为题目2,即小兔子找胡萝卜的迷宫问题,最终完成开发的游戏名为Caveman and Treasure(穴居人寻宝),游戏整体界面如下: 该项目在windows下编 ...

  3. python编程输出汉字_课内资源 - 基于Python的拼音汉字转换程序

    1.实验内容利用统计语言模型实现拼音汉字转换 输入:拼音串,输出:对应的汉字串 给定10000字的测试语料,测试音字转换的准确率 针对音字转换结果中存在的问题给出具体分析 以图表的形式表示上述结果 2 ...

  4. python电梯题_课内资源 - 基于PyQt5实现的python电梯调度程序

    1. 使用说明 1.1 项目简介 电梯作为人们出行的重要工具之一,在人们日常生活中扮演着重要的角色.而电梯的调度算法是决定电梯运行效率的关键,一个高效的调度算法对电梯能否有效地运行起到重要的作用.因此 ...

  5. java基本语法借阅_课内资源 - 基于Java和MySql实现的光盘借阅管理系统

    一.需求设计以下几个类:光盘类:用户类:借阅记录类,包括下列模块: 新建.修改.删除光盘信息 新建.修改.删除用户信息 光盘借阅/归还信息记录 查询光盘名称,用户的借阅历史 要求:基于JFrame窗体 ...

  6. jsp mysql在线考试系统源码_课内资源 - 基于JSP和MYSQL数据库实现的在线考试系统...

    1 系统概述 1.1 功能模块 教学部需要考试系统,该考试系统需要完成如下功能: 考试系统只针对于Java课程,题目全部为单项选择,共10题 学生注册.登录 后台管理员功能:题库管理.录入试卷.修改试 ...

  7. jsp mysql问卷调查_课内资源 - 基于JSP的在线调查问卷系统

    一.系统架构图 用户登入功能,由login.jsp页面和LoginServlet.java组成,页面用于填写用户名和密码:Servlet用于验证是否可以登入,如果能够登入,则将用户登入时间记录到数据库 ...

  8. java 图形处理_课内资源 - 基于Java实现的几何图形处理系统

    1 综述 针对<计算机图形学>课程开发的几何图形处理系统实现的功能包括:在UI界面中通过鼠标点击拖拽等方式可视化地输入二维图形的功能:编辑最近输入的二维图形的功能:裁剪直线的功能,支持的图 ...

  9. mysql餐馆点餐系统_课内资源 - 基于Jsp和MySql的餐厅点餐系统

    1 总体概述 本设计主要通过HTML.CSS.JavaScript网页开发技术,会话及其会话技术,过滤器技术,Java语言以及连接mysql数据库来实现一个具有登录注册功能,且登录页面使用验证码技术来 ...

  10. java洗衣店管理课程设计报告_课内资源 - 基于Java的洗衣店管理系统

    摘 要 随着科技的快速发展,人们的需求也是越来越多,为了方便对信息的管理我们小组就设计了一个洗衣店订单的管理系统. 洗衣店管理系统是典型的的信息管理系统,创建了六个类,分别是:Test类:Person ...

最新文章

  1. 【PHPMailer】写一封邮件
  2. OpenVINO安装之安装openCL
  3. php+ajax+jquery分页并显示数据
  4. 蚂蚁架构师郭援非:分布式数据库是金融机构数字化转型的最佳路径
  5. 单单表单独占一行_聊一聊 Excel 数据透视表的 4 种布局选项
  6. Python学习笔记之用户输入
  7. 北京理工大学计算机课答案,北京理工大学计算机专业考研课程模拟试题.doc
  8. Nodejs自带模块querystring的使用简介
  9. 编程实现库函数strcat
  10. HTML及相关知识汇总
  11. MySQL中的next-key lock
  12. 毛[文强]老师的一堂前端课程
  13. mysql的week函数与JAVA计算周的差别问题
  14. Binder Java层实现(一):IBinder/IInterface/Binder/Stub
  15. css适配iphoneX
  16. 科技将把我们带向哪里
  17. 【文学文娱】《有用无用论》
  18. 中国超级计算机进500强名单,中国“最强大脑”再次问鼎全球超级计算机500强榜单...
  19. webstorm实用技巧
  20. MetaQ中间件原理浅析

热门文章

  1. 一款二维码签到app
  2. mac 截图工具只能截取桌面问题
  3. Win11无法识别以太网怎么办?Win11以太网未识别网络的解决方法
  4. 将1自动补位为01_自动补位为辅助后游戏就输了一半?那是你不懂辅助的正确打开方式...
  5. 深度学习在训练时对图片随机剪裁(random crop)
  6. IM学习-认识即时通讯IM(一)
  7. python全栈工程师熟练的技巧
  8. Barracudanbsp;VSnbsp;antelope
  9. web安全攻防渗透+赵雨佳43
  10. 京东登录滑条验证破解 -- 纯js方法