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

2021-08-21 14:00:46 字數 2307 閱讀 4197

中文分詞目前可以分為「規則分詞」,「統計分詞」,「混合分詞(規則+統計)」這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。

正向最大匹配演算法:這裡需要知道兩點,乙個是分詞詞典(也即是已經分詞過的詞典),另乙個是需要被分詞的文件。假定分詞詞典中的最長詞有

i i

個漢子字串,則用被處理文件的當前字串中的前

i' role="presentation" style="position: relative;">i

i個字作為匹配字段,查詢字典。若此時分詞詞典中存在這樣乙個字串,則匹配成功,而此時被匹配的字段切分出來。如果匹配失敗,將匹配欄位中的最後乙個字去掉,對此時剩下的字串重新與分詞詞典進行匹配,如此下去直到匹配成功。也即是切分出乙個詞或剩餘字串的長度為零為止,這個時候才是匹配了一輪,接著進行下乙個

i i

字字串的匹配,方法同上,直到文件被掃瞄完為止。

正向最大匹配演算法的原理比較簡單,也沒有用到機器學習和概率論,統計的一些知識,下面貼出**:

# 定義逆向最大匹配類

class

imm(object):

# 初始化得到給定的字典中的所有詞和長度最大的詞

def__init__

(self, dic_path):

self.dictionary = set()

self.maximum = 0

#讀取詞典

with open(dic_path, 'r', encoding='utf8') as f:

for line in f:

# strip():只能刪除開頭或是結尾的字元,不能刪除中間部分的字元

line = line.strip()

print('line:',line)

ifnot line:

continue

self.dictionary.add(line)

if len(line)>=self.maximum:

self.maximum = len(line)

print('self.dictionary:',self.dictionary,'\n','self.maximum:',self.maximum)

# 該方法可切分新得到的片語

defcut

(self, text):

result =

index = len(text)

print('index:',index)

while index > 0:

word = none

for size in range(self.maximum, 0, -1):

if index - size < 0:

continue

print('index - size=>',index - size,':',index)

piece = text[(index - size):index]

print('piece:',piece)

# 判斷該詞是否在詞典中

if piece in self.dictionary:

word = piece

index -= size

break

if word is

none:

index -= 1

return result[::-1]

defmain

(): text = "南京市長江大橋"

# 詞典的位址

tokenizer = imm(r'./imm_dic.utf8')

print(tokenizer.cut(text))

main()

執行結果:

line: 南京市

line: 南京市長

line: 長江大橋

line: 人名解放軍

line: 大橋

self.dictionary:

self.maximum: 5

index: 7

index - size=> 2 : 7

piece: 市長江大橋

index - size=> 3 : 7

piece: 長江大橋

index - size=> 0 : 3

piece: 南京市

['南京市', '長江大橋']

而且這裡的分詞詞典是自己定義好的,作為簡單的demo學習一下。

參考:《pytho自然語言處理實戰 核心技術與演算法》

中文分詞 正向最大匹配與逆向最大匹配

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

分詞之正向最大匹配法

完整資料和 獲取位址github zlhcsm 知識普及 正向最大匹配法 對於輸入的一段文字從左至右 以貪心的方式切分出當前位置上長度最大的詞。正向最大匹配演算法是基於詞典的分詞方法,其分詞原理是 單詞的顆粒度越大,所能表示的含義越確切。1,一般從乙個字串的開始位置,選擇乙個最大長度的詞長的片段,如...

分詞 最大正向匹配演算法及demo

最大匹配演算法作為分詞的最初級分詞演算法,作為學習,簡單實現一下。流程圖 line 姚明喜歡打籃球 res tokenize line,dic print res 輸出為 姚明 喜歡 打籃球作為學習,先簡單實現一下,後期不斷豐實。todo 1.停用詞 2.中文和其他字元混合 3.有日期 時間 url...