正向(前向)最大匹配與逆向(後向)最大匹配。
中文分詞目前可以分為「規則分詞」,「統計分詞」,「混合分詞(規則+統計)」這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。
正向最大匹配演算法:這裡需要知道兩點,乙個是分詞詞典(也即是已經分詞過的詞典),另乙個是需要被分詞的文件。假定分詞詞典中的最長詞有ii個漢子字串,則用被處理文件的當前字串中的前ii個字作為匹配字段,查詢字典。若此時分詞詞典中存在這樣乙個字串,則匹配成功,而此時被匹配的字段切分出來。如果匹配失敗,將匹配欄位中的最後乙個字去掉,對此時剩下的字串重新與分詞詞典進行匹配,如此下去直到匹配成功。也即是切分出乙個詞或剩餘字串的長度為零為止,這個時候才是匹配了一輪,接著進行下乙個ii字字串的匹配,方法同上,直到文件被掃瞄完為止。
示例1:
假定最大匹配字數設定為5。
研究生命的
研究生命
研究生 #第乙個詞匹配成功
命的起源
命的起命的
命 #第二個詞匹配成功,乙個單字
的起源的起
的 #第三個詞匹配成功
起源 #第四個詞匹配成功
那麼正向最大匹配的結果就是
研究生 命 的 起源
生命的起源
命的起源
的起源起源 #第乙個詞匹配成功
研究生命的
究生命的
生命的命的
的 #第二個詞匹配成功
研究生命
究生命生命 #第三個詞匹配成功
研究 #第四個詞匹配成功
所以逆向最大匹配後的結果為
研究 生命 的 起源
兩種分詞過程總結
【正向匹配:從左到右,逐步去掉右部(底部)的字進行新一輪匹配,逆向匹配:從右到左,逐步去掉左部(底部)的字進行新一輪匹配】
因為中文比較複雜以及中文的特殊性,逆向最大匹配大多時候往往會比正向要準確。
示例2:
對「我們在野生動物園玩」進行分詞。
1、正向最大匹配法:
正向即從前往後取詞,從7->1,每次減乙個字,直到詞典命中或剩下1個單字。
第1次:「我們在野生動物」,掃瞄7字詞典,無
第2次:「我們在野生動」,掃瞄6字詞典,無
第6次:「我們」,掃瞄2字詞典,有
掃瞄中止,輸出第1個詞為「我們」,去除第1個詞後開始第2輪掃瞄,即:
第2輪掃瞄:
第1次:「在野生動物園玩」,掃瞄7字詞典,無
第2次:「在野生動物園」,掃瞄6字詞典,無
第6次:「在野」,掃瞄2字詞典,有
掃瞄中止,輸出第2個詞為「在野」,去除第2個詞後開始第3輪掃瞄,即:
第3輪掃瞄:
第1次:「生動物園玩」,掃瞄5字詞典,無
第2次:「生動物園」,掃瞄4字詞典,無
第3次:「生動物」,掃瞄3字詞典,無
第4次:「生動」,掃瞄2字詞典,有
掃瞄中止,輸出第3個詞為「生動」,第4輪掃瞄,即:
第4輪掃瞄:
第1次:「物園玩」,掃瞄3字詞典,無
第2次:「物園」,掃瞄2字詞典,無
第3次:「物」,掃瞄1字詞典,無
掃瞄中止,輸出第4個詞為「物」,非字典詞數加1,開始第5輪掃瞄,即:
第5輪掃瞄:
第1次:「園玩」,掃瞄2字詞典,無
第2次:「園」,掃瞄1字詞典,有
掃瞄中止,輸出第5個詞為「園」,單字字典詞數加1,開始第6輪掃瞄,即:
第6輪掃瞄:
第1次:「玩」,掃瞄1字字典詞,有
掃瞄中止,輸出第6個詞為「玩」,單字字典詞數加1,整體掃瞄結束。
正向最大匹配法,最終切分結果為:「我們/在野/生動/物/園/玩」,其中,單字字典詞為2,非詞典詞為1。
2、逆向最大匹配法:
逆向即從後往前取詞,其他邏輯和正向相同。即:
第1輪掃瞄:「在野生動物園玩」
第1次:「在野生動物園玩」,掃瞄7字詞典,無
第2次:「野生動物園玩」,掃瞄6字詞典,無
第7次:「玩」,掃瞄1字詞典,有
掃瞄中止,輸出「玩」,單字字典詞加1,開始第2輪掃瞄
第2輪掃瞄:「們在野生動物園」
第1次:「們在野生動物園」,掃瞄7字詞典,無
第2次:「在野生動物園」,掃瞄6字詞典,無
第3次:「野生動物園」,掃瞄5字詞典,有
掃瞄中止,輸出「野生動物園」,開始第3輪掃瞄
第3輪掃瞄:「我們在」
第1次:「我們在」,掃瞄3字詞典,無
第2次:「們在」,掃瞄2字詞典,無
第3次:「在」,掃瞄1字詞典,有
掃瞄中止,輸出「在」,單字字典詞加1,開始第4輪掃瞄
第4輪掃瞄:「我們」
第1次:「我們」,掃瞄2字詞典,有
掃瞄中止,輸出「我們」,整體掃瞄結束。
逆向最大匹配法,最終切分結果為:「我們/在/野生動物園/玩」,其中,單字字典詞為2,非詞典詞為0。
3、雙向最大匹配法:
正向最大匹配法和逆向最大匹配法,都有其侷限性,我舉得例子是正向最大匹配法侷限性的例子,逆向也同樣存在(如:長**店,逆向切分為「長/**店」),因此有人又提出了雙向最大匹配法,雙向最大匹配法。即,兩種演算法都切一遍,然後根據大顆粒度詞越多越好,非詞典詞和單字詞越少越好的原則,選取其中一種分詞結果輸出。
如:「我們在野生動物園玩」
正向最大匹配法,最終切分結果為:「我們/在野/生動/物/園/玩」,其中,兩字詞3個,單字字典詞為2,非詞典詞為1。
逆向最大匹配法,最終切分結果為:「我們/在/野生動物園/玩」,其中,五字詞1個,兩字詞1個,單字字典詞為2,非詞典詞為0。
非字典詞:正向(1)>逆向(0)(越少越好)
單字字典詞:正向(2)=逆向(2)(越少越好)
總詞數:正向(6)>逆向(4)(越少越好)
因此最終輸出為逆向結果。
[中文分詞之正向最大匹配演算法]
from:
ref:
中文分詞中的正向最大匹配與逆向最大匹配
我們都知道,英文的分詞由於單詞間是以空格進行分隔的,所以分詞要相對的容易些,而中文就不同了,中文中乙個句子的分隔就是以字為單位的了,而所謂的正向最大匹配和逆向最大匹配便是一種分詞匹配的方法,這裡以詞典匹配說明。所謂詞典正向最大匹配就是將一段字串進行分隔,其中分隔 的長度有限制,然後將分隔的子字串與字...
分詞演算法 正向最大匹配和逆向最大匹配實現
假設已經有正向匹配演算法原始碼,則可以將文件進行倒序處理,生成逆序文件,然後根據逆序詞典,對逆序文件使用正向最大匹配法處理即可。同理已經存在逆向最大匹配演算法,則只要將文件倒序處理,正向詞典倒序變為逆序詞典,則可以送入逆向西大匹配演算法中進行分詞處理。class imm object def ini...
jieba分詞 正向最大匹配法和逆向最大匹配法
coding utf 8 正向最大匹配法 text 研究生命的最初起源 即將被分詞的文字 dic 研究 研究生 生命 命 的 最 初 起源 在這個字典進行匹配 ww 7 每次取七個字元來匹配 mmresult index 0 text length len text while text lengt...