Pinyin2Hanzi 拼音转汉字

我要开发同款
匿名用户2016年02月16日
164阅读
开发技术Python
所属分类程序开发、拼音转换工具包
授权协议MIT

作品详情

拼音转汉字,可以作为拼音输入法的转换引擎,兼容Python2、Python3。

安装Python2:

$ python setup.py install --userPython3:

$ python3 setup.py install --user使用下面的示例在Python3中运行。

基于HMM的转换原理是viterbi算法。

from Pinyin2Hanzi import DefaultHmmParamsfrom Pinyin2Hanzi import viterbihmmparams = DefaultHmmParams()## 2个候选result = viterbi(hmm_params=hmmparams, observations=('ni', 'zhi', 'bu', 'zhi', 'dao'), path_num = 2)for item in result:    print(item.score, item.path)'''输出1.3155294593897203e-08 ['你', '知', '不', '知', '道']3.6677865125992192e-09 ['你', '只', '不', '知', '道']'''## 2个候选,使用对数打分result = viterbi(hmm_params=hmmparams, observations=('ni', 'zhi', 'bu', 'zhi', 'dao'), path_num = 2, log = True)for item in result:    print(item.score, item.path)'''输出-18.14644152864202 ['你', '知', '不', '知', '道']-19.423677486918002 ['你', '只', '不', '知', '道']'''## 2个候选,使用对数打分result = viterbi(hmm_params=hmmparams, observations=('ni', 'zhii', 'bu', 'zhi', 'dao'), path_num = 2, log = True)for item in result:    print(item.score, item.path)# 发生KeyError,`zhii`不规范

基于DAG的转换原理是词库+动态规划。

from Pinyin2Hanzi import DefaultDagParamsfrom Pinyin2Hanzi import dagdagparams = DefaultDagParams()## 2个候选result = dag(dagparams, ('ni', 'bu', 'zhi', 'dao', 'de', 'shi'), path_num=2)for item in result:    print(item.score, item.path)''' 输出0.08117536840088911 ['你不知道', '的是']0.04149191639287887 ['你不知道', '的诗']'''## 2个候选,使用对数打分result = dag(dagparams, ('ni', 'bu', 'zhi', 'dao', 'de', 'shi'), path_num=2, log=True)for item in result:    print(item.score, item.path)''' 输出-2.5111434226494866 ['你不知道', '的是']-3.1822566564324477 ['你不知道', '的诗']'''## 1个候选print( dag(dagparams, ['ti', 'chu', 'le', 'bu', 'cuo', 'de', 'jie', 'jve', 'fang', 'an'], path_num=1) )'''输出[< score=0.0017174549839096384, path=['提出了', '不错', '的', '解决方案'] >]'''## 2个候选,使用对数打分result = dag(dagparams, ('ni', 'bu', 'zhi', 'dao', 'de', 'shii'), path_num=2, log=True)print(result)# 输出空列表,因为`shii`不存在

自定义params实现AbstractHmmParams,AbstractDagParams这两个接口即可。具体可以参考源码。

关于拼音给出的拼音必须是“规范”的。例如

略->lve

据->ju

列举所有“规范”的拼音:

from Pinyin2Hanzi import all_pinyinfor py in all_pinyin():        print(py)

将拼音转换为“规范”的拼音:

from Pinyin2Hanzi import simplify_pinyinprint(simplify_pinyin('lue'))# 输出:'lve'print(simplify_pinyin('lüè'))# 输出:'lve'

判断是否是“规范”的拼音:

from Pinyin2Hanzi import is_pinyinprint(is_pinyin('lue'))# 输出:Falseprint(is_pinyin('lüè'))# 输出:Falseprint(is_pinyin('lvee'))# 输出:Falseprint(is_pinyin('lve'))# 输出:True

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论