NLP之逆向最大匹配演算法(BMM)
演算法概述
BMM是一個基於詞典的分詞演算法,與之相似的還有正向最大匹配演算法(FMM)和雙向匹配演算法(BM)。
演算法的大致過程為:
1、輸入最大詞長maxWordLength,字典wordDict,待分句子。
2、從待分句子的末尾開始向前擷取長度為maxWordLength的子句,進行分詞。
3、對一個子句的分詞過程為,首先判斷子句是否在字典中,若在,則儲存這個子句,並從原句中刪除這個子句,轉到2。
若不在,則判斷子句長度是否為1,若為1,則將單字儲存,從原句中刪除單字,轉到2。若不為1,則將子句中最右邊的一個字刪除,形成新的子句,轉到3。
程式碼實現
"""逆向最大匹配演算法"""
def BMM(wordDict, maxWordLength, sentence):
"""
@:param:
wordDict:分詞字典
maxWordLength:最大詞長
sentence:待分句子,不要有標點符號
@:return:
result:分詞結果,是句子分詞的逆序
"""
result = []
while len(sentence) != 0:
#最大詞長大於待分句子時,重置最大詞長
if len(sentence) < maxWordLength:
maxWordLength = len(sentence)
#待分子句
segWord = sentence[len(sentence)-maxWordLength:len(sentence)]
while not(segWord in wordDict):
#while 迴圈結束有兩種情況,1是segWord存在於字典中,
#2是,segWord為單字。
#防止初始segWord長度為1,出錯
if len(segWord) > 1:
segWord = segWord[1:]
else:
#result.append(segWord)
#sentence = sentence[:len(sentence)-1]
break
#第二個迴圈結束,則將分詞結果儲存到result
#並從原句中刪除已分詞
result.append(segWord)
sentence = sentence[:len(sentence)-len(segWord)]
return result
執行結果
def main():
maxWordLength, sougoDict = readDict("sougoDict.txt")
sentence1 = "今天天氣怎麼樣"
result1 = BMM(sougoDict, maxWordLength, sentence1)
printResult(result1)
sentence2 = "最高買價和最低買價分別是多少"
result2 = BMM(sougoDict, maxWordLength, sentence2)
printResult(result2)
sentence3 = "亂七八糟的字絎輿硎闓庹"
result3 = BMM(sougoDict, maxWordLength, sentence3)
printResult(result3)
執行結果
說明
這個程式碼只是一個基礎版本,沒有經過完整測試,僅供參考,如有什麼問題,還望多多指教。
分詞詞典
分詞詞典是從參考文章《千萬級巨型漢語詞庫分享》中擷取出的一小部分,共有30萬常用詞,需說明的是字典不是最新的。
下載連結
參考文章
中文分詞入門之最大匹配法
千萬級巨型漢語詞庫分享
相關文章
- 二分圖的最大匹配、完美匹配和匈牙利演算法演算法
- 二分圖最大匹配(匈牙利演算法)演算法
- 匈牙利演算法--二分圖的最大匹配演算法
- JavaScript逆向之RSA演算法JavaScript演算法
- 求二部圖最大匹配的匈牙利演算法演算法
- 二分圖的最大匹配的匈牙利演算法演算法
- 二分圖最大匹配問題匈牙利演算法演算法
- 《啊哈!演算法》我要做月老 ——二分圖最大匹配演算法
- 二分圖的最大匹配(匈牙利演算法)程式碼演算法
- 字串匹配之KMP《演算法很美》字串匹配KMP演算法
- 字串匹配之Sunday演算法字串匹配演算法
- HDU 2063 匈牙利演算法二分圖的最大匹配演算法
- HDU 2255-奔小康賺大錢(Kuhn-Munkras演算法/KM演算法-完備匹配下的最大權匹配)演算法
- 匹配字串之——KMP演算法深入理解字串KMP演算法
- 演算法之字串——正規表示式匹配演算法字串
- 對匈牙利演算法理解——對二分圖進行最大匹配的演算法演算法
- 演算法學習之路|二分圖的最大匹配—匈牙利演算法(Dfs實現)演算法
- hdu5090 匈牙利演算法二分圖最大匹配問題演算法
- js Abba逆向前瞻正則匹配例項JS
- NLP之統計句法分析(PCFG+CYK演算法)演算法
- 二分圖最大權完美匹配
- 演算法之字首樹——最大異或和演算法
- 字串匹配演算法之 BF 和 KMP 講解字串匹配演算法KMP
- 百度NLP | 神經網路語義匹配技術神經網路
- 模式匹配-KMP演算法模式KMP演算法
- 經典演算法研究系列:九、影象特徵提取與匹配之SIFT演算法演算法特徵
- iOS逆向之工具使用iOS
- CNN之於CV和NLPCNN
- 雙向最大匹配演算法——基於詞典規則的中文分詞(Java實現)演算法中文分詞Java
- 字串匹配演算法(一)字串匹配演算法
- KMP模式匹配演算法KMP模式演算法
- 字串匹配演算法:KMP字串匹配演算法KMP
- KMP字串匹配演算法KMP字串匹配演算法
- 字串匹配KMP演算法初探字串匹配KMP演算法
- 逆向中常見的加密演算法加密演算法
- 常用文字挖掘/NLP 演算法彙總演算法
- 字串匹配-BF演算法和KMP演算法字串匹配演算法KMP
- 字串匹配演算法(三)-KMP演算法字串匹配演算法KMP