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

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

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

        正向最大匹配算法:這裏需要知道兩點,一個是分詞詞典(也即是已經分詞過的詞典),另一個是需要被分詞的文檔。假定分詞詞典中的最長詞有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: https://youzipi.blog.csdn.net/article/details/105525351

ref:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章