簡介
雙向最大匹配方法是基於詞典的分詞方法,按照一定的策略將分析的漢字串與字典里面的詞條進行匹配,若在詞典中找到某個字符串,則匹配成功。
根據掃描的方向可以分為正向最大匹配算法
和逆向最大匹配
正向最大匹配算法(MM)
正向的方向定義是從字符串下標0到字符串末尾位置,取出字串與字典進行匹配
初始化最大匹配長度MaxLen,當前位置pos(初始為0),處理結果為result
0.令len = MaxLen,取出pos到pos+len的子串,查找字典
1.若匹配到,則將子串添加到result中,在保證不超出邊界范圍的情況下,pos = pos + len,向后匹配,len更新為0,回到步驟0處
2.若未在詞典中找到該子串,len--(len>1),繼續查找字典,若len == 1,則取出剩余子串,返回0步驟
2的步驟類似於:
你好嗎
你好
你
這樣的機制
逆向最大匹配(RMM)
方法與正向類似,但方向相反
方向為從最后向前推進,即待匹配字符串長度-1的位置,取MaxLen,每次未匹配上則減去最前一個字
如:
你好嗎
好嗎
嗎
這樣的機制
雙向最大匹配(BM)
雙向最大匹配算法的原理就是將正向最大匹配算法和逆向最大匹配算法進行比較,從而選擇正確的分詞方式
比較原則/步驟:
1.比較兩種匹配算法的結果
2.如果分詞數量結果不同:選擇數量較少的那個
3.如果分詞數量結果相同
1.分詞結果相同,返回任意一個
2.分詞結果不同,返回單字數較少的一個
3.若單字數也相同,任意返回一個
為什么需要雙向匹配
根據研究,中文90%左右的句子,正向匹配和逆向匹配全然重合,但是存在9%句子兩種切分方法得到的結果不一樣,單期中必然存在一個是正確的,僅有1%的句子,重合部分是錯的(或都不正確)