天天看點

百度分詞算法詳解【六】

(5)如果發現有詞條,則按照順序輸出權重比較大的幾個提 示結果;  拼音提示:

  (1)對于使用者輸入的拼音在同音詞詞典裡面掃描,如果沒有發現則不作任何提示;

  (2)如果 發現有詞條,則按照順序輸出權重比較大的幾個提示結果;

  上面說過,經過分析得出百度的分詞系統采用雙向最大比對分詞,但是後來發現推理過程中存在一個漏洞,而且推導出來的 百度分詞算法步驟還是過于繁瑣,是以進一步進行分析,看看是否前面的推導有錯誤.

  那麼以前的分析有什麼漏洞呢?

  我們推導 百度分詞有反向最大比對的依據是百度将"北京華煙雲"分詞為,從這裡看好像采用了反向最大比對,因為正向最大比對的結果應該是,但是由此就推論說百度采用了雙向最大比對還是太倉促了,前面文章我們也講過,百度有兩個詞典,一個普通詞典,一個專有詞典,而且是專有詞典的詞彙先切分,然後将剩餘片斷交給普通詞典去切分.是以上面的"北京華煙雲"之是以被切分成,另外一個可能是:京華煙雲這個詞彙是在專有詞典裡面存儲的,是以先分析,這樣得出"京華煙雲 ",剩下"北",沒什麼好切分的,是以輸出.

  這裡隻是假設,那麼是否确實"京華煙雲"在專有詞典呢?我們再看一個例子"山東北京華煙雲",百度切分的結果是,如果"京華煙雲"在普通詞典,如果是反向切分,那麼結果應該是,如果是正向切分應該是,無論如何都分不出.這說明什麼?

  說明"京華煙雲"是在那個專有詞典,是以先切分出"京華煙雲",然後剩下的"山東北"交由普通詞典切分,明顯是正向最大比對的結果輸出.當然按照我們在第一篇文章的算法推導"山東北"的切分也會得出的結論,但是明顯比正向最大比對多幾個判斷步驟,既然效果一樣,另外一個更加簡潔的方法也能說得通,那當然選擇簡便的方法了.是以初步判斷百度采取的是正向最大比對.

  我們繼續測試采用何種分詞算法,為了減少專有詞典首先分詞造成的影響,那麼查詢裡面不能出現相對特殊的詞彙,構築查詢"天才能量級",這裡應該沒有專有詞典出現過的詞彙,百度切分為,看來是正向最大比對的結果.另外,如果所有查詢詞彙都出現在專有詞典,那麼采取的是何種方法?這樣首先就得保證詞彙都出現在專有詞典,這麼保證這一點呢?

  我們構造查詢"鋪陳曉東方",百度切分為,可以看出 "陳曉東"是在專有詞典的是以先切分出來.另外一個例子 "山東京城",百度切分為,說明"東京"是在普通詞典的.OK,構造查詢"陳曉東京華煙雲",通過前面分析可以看出兩個詞彙都在專有詞典裡面,百度切分為,說明對于專有詞典詞彙也是采取正向最大比對或者雙向最大比對.那麼使用反向最大比對了嗎? 構造查詢例子"陳曉東方不敗",首先我們肯定"陳曉東"和"東方不敗"都是在專有詞典出現的,如果是正向切分,那麼應該是或者如果是反向切分則是,可以看出百度的切分是或者,說明采用的是正向最大比對.通過分析,百度的詞典不包含"不敗"這個單詞,是以實際上百度的切分結果是 ,很明顯這和我們以前推導的算法是有沖突的,是以以前的分析算法确實有問題,是以結論是百度采取的是正向最大比對算法.

  重新歸納一下百度的分詞算法系統:首先用專有詞典采用最大正向比對分詞,切分出部分結果,剩餘沒有切分交給普通詞典,同樣采取正向最大比對分詞,最後輸出結果.

  另外,GOOGLE也是采用正向最大比對分詞算法,不過好像沒有那個專用詞典,是以很多專名都被切碎了.

  從這點講, GOOGLE在中文詞典建構上比百度差些,還需要加把子力氣才行,不過這也不是什麼多難的事.

<script type="text/javascript"></script> <script src="cache/hottags_forum_cache_jsonp.txt" type="text/javascript"></script>