中文分詞目前可以分為「規則分詞」,「統計分詞」,「混合分詞(規則+統計)」這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。
正向最大匹配演算法:這裡需要知道兩點,乙個是分詞詞典(也即是已經分詞過的詞典),另乙個是需要被分詞的文件。假定分詞詞典中的最長詞有
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...