最大匹配法是最簡單的分詞方法,他完全使用詞典進行分詞,如果詞典好,則分詞的效果好
正向,即從左往右進行匹配
#maximum match method 最大匹配法
class mm:
def __init__(self):
self.window_size = 4
def cut(self,text):
result =
index = 0
text_lenght = len(text)
#研究生命的起源
dic = ["研究","研究生","生命"]
while text_lenght >index:
#range(3,0,-1)
for size in range(min(self.window_size+index,text_lenght),index,-1):
piece = text[index:size]
print("size:", size,piece)
if piece in dic:
index = size-1
break
index = index+1 #第一次結束index = 3
print(result)
return result
逆向即從右往左進行匹配
#rmm:reverse maxmium match method 逆向最大匹配
class rmm:
def __init__(self):
self.window_size = 3
def cut(self,text):
result =
index = len(text)
#研究生命的起源
dic = ["研究","研究生","生命"]
while index>0:
for size in range(max((index-self.window_size),0),index):
piece = text[size:index]
print("size:", size,piece)
if piece in dic:
index = size+1
print("index:", index)
break
print("index:",index)
index = index - 1
result.reverse()
print(result)
return result
同時根據正向和逆向的結果,進行匹配
class mcut():
def __init__(self):
self.mm = mm()
self.rmm = rmm()
def cut(self,sentence):
"""1. 詞語數量不相同,選擇分詞後詞語數量少的
2. 如果詞語數量相同,返回單字數量少的
"""mm_ret = self.mm.cut(sentence)
rmm_ret = self.rmm.cut(sentence)
if len(mm_ret)==len(rmm_ret):
mm_ret_signle_len = len([i for i in mm_ret if len(i)==1])
rmm_ret_signle_len = len([i for i in rmm_ret if len(i)==1])
return mm_ret if rmm_ret_signle_len>mm_ret_signle_len else rmm_ret
else:
return mm_ret if len(mm_ret)
python雙向最大匹配演算法 雙向最大匹配分詞演算法
usr bin python encoding gbk import sys dictmaxlength 5 dctdict encoding gbk 初始化字典 初始化最大詞長 def initdct dct global dctdict global dictmaxlength dctobj o...
分詞演算法 正向最大匹配和逆向最大匹配實現
假設已經有正向匹配演算法原始碼,則可以將文件進行倒序處理,生成逆序文件,然後根據逆序詞典,對逆序文件使用正向最大匹配法處理即可。同理已經存在逆向最大匹配演算法,則只要將文件倒序處理,正向詞典倒序變為逆序詞典,則可以送入逆向西大匹配演算法中進行分詞處理。class imm object def ini...
匈牙利演算法(最大匹配問題)
匈牙利演算法 二分圖的最大匹配可以轉換為乙個網路流的問題,但是我們一般使用匈牙利演算法,這種演算法更易於理解,方便編寫。介紹這個演算法之前,首先要介紹一些必要的概念。交錯路 從乙個未匹配點出發,依次遍歷未匹配邊 匹配邊 未匹配邊,這樣交替下去,這條路徑稱為交錯路。增廣路 從乙個未匹配點出發,依次遍歷...