分詞演算法 正向最大匹配和逆向最大匹配實現

2021-09-10 17:58:54 字數 2552 閱讀 5404

假設已經有正向匹配演算法原始碼,則可以將文件進行倒序處理,生成逆序文件,然後根據逆序詞典,對逆序文件使用正向最大匹配法處理即可。同理已經存在逆向最大匹配演算法,則只要將文件倒序處理,正向詞典倒序變為逆序詞典,則可以送入逆向西大匹配演算法中進行分詞處理。

class imm(object):

def __init__(self, dic_path, reversed_match = true):

self.dictionary = set()

self.maximun = 0

self.reversed_match = reversed_match

with open(dic_path, "r", encoding="utf-8-sig") as f:

for line in f:

line = line.strip()

if not line:

continue

if self.reversed_match: #choose reverse maximum match method

self.dictionary.add(line)

else: #choose maximum match method

self.dictionary.add(line[::-1])

if len(line) > self.maximun:

self.maximun = len(line)

#print(self.dictionary)

def cut(self, text):

if self.reversed_match:

text = text

else:

text = text[::-1]

index = len(text)

result = #store tokenizer result

while index > 0:

word =

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

if index < size:

continue

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

if piece in self.dictionary:

word = piece

if self.reversed_match:

else:

index -= size

break

if not word:

index -= 1

if self.reversed_match:

return result[::-1]

else:

return result

path = r"e:\\學習相關資料\\python自然語言處理實戰核心技術與演算法--**\\第三章"

doc = r"imm_dic.txt"

text = "南京市長江大橋"

doc_in_path = path + "\\" + doc

tokenizer = imm(doc_in_path)

print(tokenizer.cut(text))

tokenizer = imm(doc_in_path, reversed_match=false)

print(tokenizer.cut(text))

其中,imm_dic.txt內容為:

南京市

南京市長

長江大橋

人民解放軍

大橋江大橋

這裡,將字串反轉的實現方式是:

x = "hello world"

z = x[::-1]

print(z)

將字串逐字元反轉

在開啟檔案處,

encoding="utf-8-sig"

encoding="utf-8"

主要是發現

dic = 

with open(doc_in_path, "r", encoding="utf-8-sig") as f:

for line in f:

line = line.strip()

if line:

print(dic)

['南京市', '南京市長', '長江大橋', '人民解放軍', '大橋', '江大橋']

dic = 

with open(doc_in_path, "r", encoding="utf-8") as f:

for line in f:

line = line.strip()

if line:

print(dic)

['\ufeff南京市', '南京市長', '長江大橋', '人民解放軍', '大橋', '江大橋']

"\ufeff"的存在,限制我只能使用「utf-8-sig」

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

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

jieba分詞 正向最大匹配法和逆向最大匹配法

coding utf 8 正向最大匹配法 text 研究生命的最初起源 即將被分詞的文字 dic 研究 研究生 生命 命 的 最 初 起源 在這個字典進行匹配 ww 7 每次取七個字元來匹配 mmresult index 0 text length len text while text lengt...

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

我們都知道,英文的分詞由於單詞間是以空格進行分隔的,所以分詞要相對的容易些,而中文就不同了,中文中乙個句子的分隔就是以字為單位的了,而所謂的正向最大匹配和逆向最大匹配便是一種分詞匹配的方法,這裡以詞典匹配說明。所謂詞典正向最大匹配就是將一段字串進行分隔,其中分隔 的長度有限制,然後將分隔的子字串與字...