最大匹配演算法

2021-09-26 16:09:28 字數 1954 閱讀 8598

最大匹配法是最簡單的分詞方法,他完全使用詞典進行分詞,如果詞典好,則分詞的效果好

正向,即從左往右進行匹配

#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...

匈牙利演算法(最大匹配問題)

匈牙利演算法 二分圖的最大匹配可以轉換為乙個網路流的問題,但是我們一般使用匈牙利演算法,這種演算法更易於理解,方便編寫。介紹這個演算法之前,首先要介紹一些必要的概念。交錯路 從乙個未匹配點出發,依次遍歷未匹配邊 匹配邊 未匹配邊,這樣交替下去,這條路徑稱為交錯路。增廣路 從乙個未匹配點出發,依次遍歷...