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

2021-10-05 01:47:33 字數 2960 閱讀 8822

正向(前向)最大匹配與逆向(後向)最大匹配。

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

正向最大匹配演算法:這裡需要知道兩點,乙個是分詞詞典(也即是已經分詞過的詞典),另乙個是需要被分詞的文件。假定分詞詞典中的最長詞有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...