如何实现拼音与汉字的互相转换

发表于2个月前(2016-02-16 15:01)   阅读(58) | 评论(0) 6人收藏此文章, 我要收藏
赞0

4月23日,武汉源创会火热报名中,期待您的参与>>>>>   

目录[-]

  • 基于词库的汉字转拼音
  • 基于词库和分词工具的汉字转拼音
  • 基于HMM的拼音转汉字
  • 基于词库的拼音转汉字
  • 代码实现

基于词库的汉字转拼音

词库中既要包含每个字的拼音,也要包含常用单词/短语的读音。有些字是多音字,所以至少要保存其最常用的读音,不常用的读音多出现在单词/短语里。

好了,词库准备好了,现在手头有一句话要转换要转换为拼音,这句话是:

你好世界杯

我们的词库是这样子的:

你:nǐ
好:hǎo,hào
世:shì
界:jiè
杯:bēi
世界:shì,jiè
你好:nǐ,hǎo
苦尽甘来:kǔ,jìn,gān,lái

词库中最长的词苦尽甘来包含4个字。所以你好世界杯从4个字开始匹配:

  • 判断你好世界是否在词库中,不在;
  • 判断你好世是否在词库中,不在;
  • 判断你好是否在词库中,在,得到nǐ,hǎo
  • 判断世界杯是否在词库中,不在;
  • 判断世界是否在词库中,在,得到shì,jiè
  • 判断是否在词库中,在,得到bēi

于是你好世界杯被转换为nǐ,hǎo,shì,jiè,bēi

基于词库和分词工具的汉字转拼音

纯粹的基于词库的方法在实际的使用中会遇到问题,例如提出了解决方案这句话中了解会被当作一个单词,所以会得到错误的结果:

tí,chū,liǎo,jiě,jué,fāng,àn

更好的方法是先进行分词得到:

提出
了
解决
方案

然后基于词库对每个结果分别处理。

基于HMM的拼音转汉字

这里的拼音一般不带声调。

将汉字作为隐藏状态,拼音作为观测值,使用viterbi算法可以将多个拼音转换成合理的汉字。例如给出ti,chu,le,jie,jue,fang,an,viterbi算法会认为提出了解决方案是最合理的状态序列。

HMM需要三个分布,分别是:

  • 初始时各个状态的概率分布
  • 各个状态互相转换的概率分布
  • 状态到观测值的概率分布

这个3个分布就是三个矩阵,根据一些文本库统计出来即可。

viterbi算法基于动态规划,维基百科 - Viterbi algorithm给出了很好的解释和示例。

基于词库的拼音转汉字

原则:

  • 词的权重大于字的权重;
  • 转换中匹配的词越多,权重越小。

词库的格式是:

拼音:单词:权重

例如:

ni:你:0.15
ni:泥:0.12
a:啊:0.18
hao:好:0.14
nihao:你好:0.6

假如输入是ni,hao,a,我们计算一下各种组合的权重:

组合 权重
你,好,啊 0.15*0.14*0.18 = 0.00378
泥,好,啊 0.12*0.14*0.18 = 0.003024
你好,啊 0.6*0.18 = 0.108

可以看出,你好,啊是最好的结果。

实际实现中需要用到动态规划, 和求有向无环图中两点之间最短距离类似。

代码实现

  • 拼音转汉字(拼音输入法引擎):https://github.com/someus/Pinyin2Hanzi
  • 汉字转拼音:https://github.com/someus/ChineseTone

如何实现拼音与汉字的互相转换相关推荐

  1. 汉字拼音计算机,拼音_汉字计算机自动转换系统

    拼音_汉字计算机自动转换系统 夕 年一 月 计 算 机 学 报 第 ! 期 拼音汉 字计算机自动转换系统 凌潘 云杨长 生江大浙学计算机#系 . . % & ( )丫 ) +, ( . %(/ ...

  2. pinyin4j:拼音与汉字的转换实例

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制. 官网: http://pinyin4j.sourceforge.net/ 有时候,需要将汉字编程对应的拼音 ...

  3. solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能

    首先看一下从淘宝输入搜索keyword获取到的一些数据信息: 第一张:使用拼音的全程来查询 能够看到提示的是匹配的转换的拼音的方式,看最后一个提示项 这里另一个在指定分类文件夹下搜索的功能,难道后台还 ...

  4. iOS searchbar拼音和汉字搜索全国城市

    最近在做一个地图相关的应用,涉及到全国城市的切换,于是打算把这个记录下来 用到的主要东西有:百度的全国城市列表,txt格式,jasonkit数据解析第三方,tableview,searchabar,汉 ...

  5. solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现

    今天思考实现了下字符加汉字的搜索建议的 实现--思想主要还是昨天的思想,不过这个方法使用的是匹配查询 ,查询速度可能不太理想 /*** * @描述:用于完成拼音加汉字 组合情况的搜索建议 ---尽量少 ...

  6. 使用完整拼音查找汉字(完整拼音,不是网上散布的首字符拼音那种方法)

    注意:这绝不是网上散播的只能使用拼音首字符进行汉字查找的方案,这是一个真正的输入完整拼音得到相应汉字的解决办法. 大部分程序员眼中只有变量.函数--他们忽略生活中的一切,他们并不理解真正的优雅的程序解 ...

  7. 通过拼音模糊搜索汉字的功能实现

    一.原由 前一段时间用php实现通讯录系统,需要用到拼音查找汉字功能,匹配通讯录的姓名字段,于是在网上搜索已有的开源代码,下面总结和分析一下思路和具体实现. 二.思路 查找了网上的多种解决方案,大致分 ...

  8. 解决:centos中不能打拼音输汉字

    解决:centos中不能打拼音输汉字 虚拟机centos,不能输入汉字.只需在设置切换输入及可! 1.在设置中Region&Language,输入源中的+号 2.选择汉字(中国),再选择汉语( ...

  9. 拼音转汉字、SpEL表达式、汉字转拼音

    一.SpEL语法案例 import org.springframework.expression.Expression; import org.springframework.expression.E ...

最新文章

  1. 计算机视觉方向简介 | 深度学习视觉三维重建
  2. mysql+join+分库分表_MySQL分库分表篇
  3. iis7+php_5.5,IIS7+php5.5+fastcgi
  4. java读取安卓本地文件_Java Android 二进制文件读写
  5. 前端学习(1914)vue之电商管理系统电商系统之创建right分支并把代码推到码云
  6. 理发店管理系统java_美容美发店管理系统的设计与实现(JSP,SQLServer)(含录像)
  7. IAR集成开发环境的使用
  8. MD5 SHA1 HMAC HMAC_SHA1区别
  9. SESSION和COOKIE的使用
  10. 物联网将如何影响你的钱包?
  11. 声道测试音频_功率放大器测试方法
  12. 一键下载大学慕课等课程视频
  13. 干货|程序员有哪些含金量高的证书可以考?
  14. 传:九大前缀,三大后缀
  15. 点餐系统的开发,java后台+微信小程序 实现完整的餐厅点餐系统。微信扫码点餐小程序源码讲解
  16. 2019八泉峡第二届国际露营大会即将开启
  17. ToC产品和ToB产品的区别
  18. P1085 [NOIP2004 普及组第一题] 不高兴的津津 ← 模拟题
  19. python-获取当前目录/上级目录/上上级目录...
  20. 微信小程序16进制颜色码

热门文章

  1. 大唐杯5g题库_“大唐杯”全国大学生移动通信技术大赛暨5G教育创新论坛成功举行...
  2. leetcode算法题--二叉搜索树与双向链表
  3. leetcode算法题--删除一次得到子数组最大和★
  4. linux 修改dmi信息,如何从linux清除DMI系统事件日志?
  5. 前端大神用React刻了一个Windows XP
  6. 看一家公司发展得如何就看这家公司的财务部门
  7. 一次针对SAP系统的完美渗透测试
  8. Zabbix-3.0.3实现微信(WeChat)告警
  9. 《梦断代码》读后笔记_2
  10. 如何为网页添加小宠物挂件:小老鼠、金鱼等