分詞之正向最大匹配法

2021-10-02 07:20:27 字數 1605 閱讀 3141

完整資料和**獲取位址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個字作為匹配 字段查詢詞典。若詞典中存在這樣乙個字詞,則 匹配成功,匹配字段作為乙個詞被切分出來,否則 匹配失敗。應將匹配欄位中的最後乙個字去掉,對剩下的字串重新進行匹配處理。如此進行下...

中文分詞之正向最大匹配演算法

中文分詞目前可以分為 規則分詞 統計分詞 混合分詞 規則 統計 這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。正向最大匹配演算法 這裡需要知道兩點,乙個是分詞詞典 也即是已經分詞過...