完整資料和**獲取位址github:zlhcsm
知識普及-正向最大匹配法:
對於輸入的一段文字從左至右、以貪心的方式切分出當前位置上長度最大的詞。
正向最大匹配演算法是基於詞典的分詞方法,其分詞原理是:單詞的顆粒度越大,所能表示的含義越確切。
1,一般從乙個字串的開始位置,選擇乙個最大長度的詞長的片段,如果序列不足最大詞長,則選擇全部序列。
2,首先看該片段是否在詞典中,如果是,則算為乙個分出來的詞,如果不是,則從右邊開始,減少乙個字元,然後看短一點的這個片段是否在詞典中,一次迴圈,直到只剩下乙個字。
3,序列變為第2步驟擷取分詞後,剩下的部分序列
1.讀取字典檔案
def
init()
:"""
讀取字典檔案
載入詞典
:return:
"""with
open
("../dic/dict.txt"
,"r"
, encoding=
"utf8"
)as dict_input:
for word in dict_input:
# 檔案格式為:單詞 詞頻 詞性
" ")[0
].strip(
))
2.切詞方法
# 實現正向匹配演算法中的切詞方法
defcut_words
(raw_sentence, word_dic)
:# 統計詞典中最長的詞
max_length =
max(
len(word)
for word in words_dic)
sentence = raw_sentence.strip(
)# 統計序列長度
word_length =
len(sentence)
# 儲存切分好的詞語
cut_word_list =
while word_length >0:
max_cut_length =
min(max_length, word_length)
sub_sen = sentence[
0:max_cut_length]
while max_cut_length >0:
if sub_sen in word_dic:
break
elif max_cut_length ==1:
break
else
: max_cut_length = max_cut_length -
1 sub_sen = sub_sen[
0:max_cut_length]
sentence = sentence[max_cut_length:
] word_length = word_length - max_cut_length
words =
'/'.join(cut_word_list)
return words
end jieba分詞 正向最大匹配法和逆向最大匹配法
coding utf 8 正向最大匹配法 text 研究生命的最初起源 即將被分詞的文字 dic 研究 研究生 生命 命 的 最 初 起源 在這個字典進行匹配 ww 7 每次取七個字元來匹配 mmresult index 0 text length len text while text lengt...
分詞演算法的python實現(正向最大匹配法)
正向最大匹配法又稱mm法,其基本思想是 假設分詞詞典中的最長詞由i個漢字字元組成,則 用被處理文件的當前字串中前i個字作為匹配 字段查詢詞典。若詞典中存在這樣乙個字詞,則 匹配成功,匹配字段作為乙個詞被切分出來,否則 匹配失敗。應將匹配欄位中的最後乙個字去掉,對剩下的字串重新進行匹配處理。如此進行下...
中文分詞之正向最大匹配演算法
中文分詞目前可以分為 規則分詞 統計分詞 混合分詞 規則 統計 這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。正向最大匹配演算法 這裡需要知道兩點,乙個是分詞詞典 也即是已經分詞過...