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 DefaultHmmParams
from Pinyin2Hanzi import viterbi
hmmparams = 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個候選,使用對數(shù)打分
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個候選,使用對數(shù)打分
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)
# 發(fā)生KeyError,`zhii`不規(guī)范
基于DAG的轉換
原理是詞庫+動態(tài)規(guī)劃。
from Pinyin2Hanzi import DefaultDagParams
from Pinyin2Hanzi import dag
dagparams = 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個候選,使用對數(shù)打分
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個候選,使用對數(shù)打分
result = dag(dagparams, ('ni', 'bu', 'zhi', 'dao', 'de', 'shii'), path_num=2, log=True)
print(result)
# 輸出空列表,因為`shii`不存在
自定義params
實現(xiàn)AbstractHmmParams, AbstractDagParams這兩個接口即可。具體可以參考源碼。
關于拼音
給出的拼音必須是“規(guī)范”的。例如
略 -> lve
據(jù) -> ju
列舉所有“規(guī)范”的拼音:
from Pinyin2Hanzi import all_pinyin for py in all_pinyin(): print(py)
將拼音轉換為“規(guī)范”的拼音:
from Pinyin2Hanzi import simplify_pinyin
print(simplify_pinyin('lue'))
# 輸出:'lve'
print(simplify_pinyin('lüè'))
# 輸出:'lve'
判斷是否是“規(guī)范”的拼音:
from Pinyin2Hanzi import is_pinyin
print(is_pinyin('lue'))
# 輸出:False
print(is_pinyin('lüè'))
# 輸出:False
print(is_pinyin('lvee'))
# 輸出:False
print(is_pinyin('lve'))
# 輸出:True
評論
圖片
表情
