詞圖算法
詞圖指的是句子中全部詞可能構成的圖。若是一個詞A的下一個詞多是B的話,那麼A和B之間具備一條路徑E(A,B)。一個詞可能有多個後續,同時也可能有多個前驅,它們構成的圖我稱做詞圖。數組
須要稀疏2維矩陣模型,以一個詞的起始位置做爲行,終止位置做爲列,能夠獲得一個二維矩陣。例如:「他說的確實在理」這句話spa
圖詞的存儲方法:一種是的DynamicArray法,一種是快速offset法。Hanlp代碼中採用的是第二種方法。3d
一、DynamicArray(二維數組)法blog
在詞圖中,行和列的關係:col爲n 的列中全部詞能夠與row爲n 的全部行中的詞進行組合。例如「的確」這個詞,它的col =5,須要和它計算平滑值的有兩個,分別是row =5的兩個詞:「實」和「實在」。可是在遍歷和插入的時候,須要一個個比較col和row的關係,複雜度是O(N)。博客
二、快速offsetit
一個一維數組,每一個元素是一個單鏈表遍歷
「的確」的行號是4,長度是2,4+2=6,因而第六行的兩個詞「實/實在」就是「的確」的後續。方法
同時這種方法速度很是快,插入和查詢的時間都是O(1)。im
Hanlp核心詞典:
最短路徑算法—viterbi(動態規劃路徑)
Frequency:核心詞典中的詞頻
nTwoWordsFreq:共現詞頻
intMAX_FREQUENCY= 25146057
double dTemp =(double) 1 / MAX_FREQUENCY +0.00001
dSmoothingPara =0.1
Viterbi最短路徑有向圖
一、計算過程從上至下,根據計算出的權重值變動前驅結點,保證前驅結點惟一(動態規劃路徑)
二、計算結束後,從最後一個結點開始取出term,依次取出該結點的前驅結點便可分詞結果:理,在,確實,的,說,他
文章來源於亞當-adam的博客