首页 > GitHub

汉字转拼音,GitHub

互联网 2021-04-16 23:05:52
Pinyin2Hanzi

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

安装

Python 2:

$ python setup.py install --user

Python 3:

$ python3 setup.py install --user使用

下面的示例在Python 3中运行。

基于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训练

原始数据和训练代码在train目录下。数据来自jpinyin、pinyin、搜狗语料库-互联网词库等。处理数据时用到了汉字转拼音工具ChineseTone。

原理

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

License

MIT

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读