中文分詞之逆向最大匹配演算法結合時間位置進行分詞

2022-07-20 16:00:17 字數 1284 閱讀 8083

之前基於lucene分詞元件探索了按時間位置進行中文分詞的演算法,中文分詞方面採用了最大逆向匹配演算法,由於時間資訊儲存在乙個list中,當每個詞被切割出來時,其時間資訊將會同時按序提取。將分詞結果寫入倒排索引的詞表,時間資訊寫入到倒排表中的offset屬性中。停詞表和詞彙表都儲存在hashset中。

逆向最大匹配法演算法如下所示:

逆向匹配法思想與正向一樣,只是從右向左切分,這裡舉乙個例子:

輸入例句:s1="計算語言學課程有意思" ;

定義:最大詞長maxlen = 5;s2= " ";分隔符 = 「/」;

假設存在詞表:…,計算語言學,課程,意思,…;

最大逆向匹配分詞演算法過程如下:

(1)s2="";s1不為空,從s1右邊取出候選子串w="課程有意思";

(2)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="程有意思";

(3)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="有意思";

(4)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="意思"

(5)查詞表,「意思」在詞表中,將w加入到s2中,s2=" 意思/",並將w從s1中去掉,此時s1="計算語言學課程有";

(6)s1不為空,於是從s1左邊取出候選子串w="言學課程有";

(7)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="學課程有";

(8)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="課程有";

(9)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="程有";

(10)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="有",這w是單字,將w加入到s2中,s2=「 /有 /意思」,並將w從s1中去掉,此時s1="計算語言學課程";

(11)s1不為空,於是從s1左邊取出候選子串w="語言學課程";

(12)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="言學課程";

(13)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="學課程";

(14)查詞表,w不在詞表中,將w最左邊乙個字去掉,得到w="課程";

(15)查詞表,「意思」在詞表中,將w加入到s2中,s2=「 課程/ 有/ 意思/」,並將w從s1中去掉,此時s1="計算語言學";

(16)s1不為空,於是從s1左邊取出候選子串w="計算語言學";

(17)查詞表,「計算語言學」在詞表中,將w加入到s2中,s2=「計算語言學/ 課程/ 有/ 意思/」,並將w從s1中去掉,此時s1="";

(18)s1為空,輸出s2作為分詞結果,分詞過程結束。

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

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

中文分詞之正向最大匹配演算法

中文分詞目前可以分為 規則分詞 統計分詞 混合分詞 規則 統計 這三個主要流派。這次介紹下基於規則的分詞,其是一種機械的分詞方法,主要通過維護詞典,在切分語句時,將語句的每個字串與詞表中的詞逐一進行匹配,找到則切分,否則不予切分。正向最大匹配演算法 這裡需要知道兩點,乙個是分詞詞典 也即是已經分詞過...

逆向最大匹配分詞演算法C

逆向順序 程式設計師 序員 員 名程式 程式 序 一名程 名程 程 是一名 一名 名 我是一 是一 一 x我是 我是 是 xx我 x我 我 叫xx xx x 我叫x 叫x x 好我叫 我叫 叫 家好我 好我 我 大家 家 大class program else if flag else len st...