如何实现拼音与汉字的互相转换
如何实现拼音与汉字的互相转换
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
如何实现拼音与汉字的互相转换相关推荐
- 汉字拼音计算机,拼音_汉字计算机自动转换系统
拼音_汉字计算机自动转换系统 夕 年一 月 计 算 机 学 报 第 ! 期 拼音汉 字计算机自动转换系统 凌潘 云杨长 生江大浙学计算机#系 . . % & ( )丫 ) +, ( . %(/ ...
- pinyin4j:拼音与汉字的转换实例
Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制. 官网: http://pinyin4j.sourceforge.net/ 有时候,需要将汉字编程对应的拼音 ...
- solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能
首先看一下从淘宝输入搜索keyword获取到的一些数据信息: 第一张:使用拼音的全程来查询 能够看到提示的是匹配的转换的拼音的方式,看最后一个提示项 这里另一个在指定分类文件夹下搜索的功能,难道后台还 ...
- iOS searchbar拼音和汉字搜索全国城市
最近在做一个地图相关的应用,涉及到全国城市的切换,于是打算把这个记录下来 用到的主要东西有:百度的全国城市列表,txt格式,jasonkit数据解析第三方,tableview,searchabar,汉 ...
- solr入门之拼音加汉字方式的搜索建议自动补全的不高效实现
今天思考实现了下字符加汉字的搜索建议的 实现--思想主要还是昨天的思想,不过这个方法使用的是匹配查询 ,查询速度可能不太理想 /*** * @描述:用于完成拼音加汉字 组合情况的搜索建议 ---尽量少 ...
- 使用完整拼音查找汉字(完整拼音,不是网上散布的首字符拼音那种方法)
注意:这绝不是网上散播的只能使用拼音首字符进行汉字查找的方案,这是一个真正的输入完整拼音得到相应汉字的解决办法. 大部分程序员眼中只有变量.函数--他们忽略生活中的一切,他们并不理解真正的优雅的程序解 ...
- 通过拼音模糊搜索汉字的功能实现
一.原由 前一段时间用php实现通讯录系统,需要用到拼音查找汉字功能,匹配通讯录的姓名字段,于是在网上搜索已有的开源代码,下面总结和分析一下思路和具体实现. 二.思路 查找了网上的多种解决方案,大致分 ...
- 解决:centos中不能打拼音输汉字
解决:centos中不能打拼音输汉字 虚拟机centos,不能输入汉字.只需在设置切换输入及可! 1.在设置中Region&Language,输入源中的+号 2.选择汉字(中国),再选择汉语( ...
- 拼音转汉字、SpEL表达式、汉字转拼音
一.SpEL语法案例 import org.springframework.expression.Expression; import org.springframework.expression.E ...
最新文章
- 计算机视觉方向简介 | 深度学习视觉三维重建
- mysql+join+分库分表_MySQL分库分表篇
- iis7+php_5.5,IIS7+php5.5+fastcgi
- java读取安卓本地文件_Java Android 二进制文件读写
- 前端学习(1914)vue之电商管理系统电商系统之创建right分支并把代码推到码云
- 理发店管理系统java_美容美发店管理系统的设计与实现(JSP,SQLServer)(含录像)
- IAR集成开发环境的使用
- MD5 SHA1 HMAC HMAC_SHA1区别
- SESSION和COOKIE的使用
- 物联网将如何影响你的钱包?
- 声道测试音频_功率放大器测试方法
- 一键下载大学慕课等课程视频
- 干货|程序员有哪些含金量高的证书可以考?
- 传:九大前缀,三大后缀
- 点餐系统的开发,java后台+微信小程序 实现完整的餐厅点餐系统。微信扫码点餐小程序源码讲解
- 2019八泉峡第二届国际露营大会即将开启
- ToC产品和ToB产品的区别
- P1085 [NOIP2004 普及组第一题] 不高兴的津津 ← 模拟题
- python-获取当前目录/上级目录/上上级目录...
- 微信小程序16进制颜色码
热门文章
- 大唐杯5g题库_“大唐杯”全国大学生移动通信技术大赛暨5G教育创新论坛成功举行...
- leetcode算法题--二叉搜索树与双向链表
- leetcode算法题--删除一次得到子数组最大和★
- linux 修改dmi信息,如何从linux清除DMI系统事件日志?
- 前端大神用React刻了一个Windows XP
- 看一家公司发展得如何就看这家公司的财务部门
- 一次针对SAP系统的完美渗透测试
- Zabbix-3.0.3实现微信(WeChat)告警
- 《梦断代码》读后笔记_2
- 如何为网页添加小宠物挂件:小老鼠、金鱼等