paoding :Lucene中文分詞“庖丁解牛” Paoding Analysis
imdict :imdict智能詞典所采用的智能中文分詞程序
mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 實(shí)現的中文分詞器
ik :采用了特有的“正向迭代最細粒度切分算法“,多子處理器分析模式
2. 開(kāi)發(fā)者及開(kāi)發(fā)活躍度:
paoding :qieqie.wang, google code 上最后一次代碼提交:2008-06-12,svn 版本號 132
imdict :XiaoPingGao, 進(jìn)入了 lucene contribute,lucene trunk 中 contrib/analyzers/smartcn/ 最后一次提交:2009-07-24,
mmseg4j :chenlb2008,google code 中 2009-08-03 (昨天),版本號 57,log為:mmseg4j-1.7 創(chuàng )建分支
ik :linliangyi2005,google code 中 2009-07-31,版本號 41
3. 用戶(hù)自定義詞庫:
paoding :支持不限制個(gè)數的用戶(hù)自定義詞庫,純文本格式,一行一詞,使用后臺線(xiàn)程檢測詞庫的更新,自動(dòng)編譯更新過(guò)的詞庫到二進(jìn)制版本,并加載
imdict :暫時(shí)不支持用戶(hù)自定義詞庫。但 原版 ICTCLAS 支持。支持用戶(hù)自定義 stop words
mmseg4j :自帶sogou詞庫,支持名為 wordsxxx.dic, utf8文本格式的用戶(hù)自定義詞庫,一行一詞。不支持自動(dòng)檢測。 -Dmmseg.dic.path
ik : 支持api級的用戶(hù)詞庫加載,和配置級的詞庫文件指定,無(wú) BOM 的 UTF-8 編碼,\r\n 分割。不支持自動(dòng)檢測。
4. 速度(基于官方介紹,非自己測試)
paoding :在PIII 1G內存個(gè)人機器上,1秒 可準確分詞 100萬(wàn) 漢字
imdict :483.64 (字節/秒),259517(漢字/秒)
mmseg4j : complex 1200kb/s左右, simple 1900kb/s左右
ik :具有50萬(wàn)字/秒的高速處理能力
5. 算法和代碼復雜度
paoding :svn src 目錄一共1.3M,6個(gè)properties文件,48個(gè)java文件,6895 行。使用不用的 Knife 切不同類(lèi)型的流,不算很復雜。
imdict :詞庫 6.7M(這個(gè)詞庫是必須的),src 目錄 152k,20個(gè)java文件,2399行。使用 ICTCLAS HHMM隱馬爾科夫模型,“利用大量語(yǔ)料庫的訓練來(lái)統計漢語(yǔ)詞匯的詞頻和跳轉概率,從而根據這些統計結果對整個(gè)漢語(yǔ)句子計算最似然(likelihood)的切分”
mmseg4j : svn src 目錄一共 132k,23個(gè)java文件,2089行。MMSeg 算法 ,有點(diǎn)復雜。
ik : svn src 目錄一共6.6M(詞典文件也在里面),22個(gè)java文件,4217行。多子處理器分析,跟paoding類(lèi)似,歧義分析算法還沒(méi)有弄明白。
6. 文檔
paoding :幾乎無(wú)。代碼里有一些注釋?zhuān)驗閷?shí)現比較復雜,讀代碼還是有一些難度的。
imdict : 幾乎無(wú)。 ICTCLAS 也沒(méi)有詳細的文檔,HHMM隱馬爾科夫模型的數學(xué)性太強,不太好理解。
mmseg4j : MMSeg 算法 是英文的,但原理比較簡(jiǎn)單。實(shí)現也比較清晰。
ik : 有一個(gè)pdf使用手冊,里面有使用示例和配置說(shuō)明。
7. 其它
paoding :引入隱喻,設計比較合理。search 1.0 版本就用的這個(gè)。主要優(yōu)勢在于原生支持詞庫更新檢測。主要劣勢為作者已經(jīng)不更新甚至不維護了。
imdict :進(jìn)入了 lucene trunk,原版 ictclas 在各種評測中都有不錯的表現,有堅實(shí)的理論基礎,不是個(gè)人山寨。缺點(diǎn)為暫時(shí)不支持用戶(hù)詞庫。
mmseg4j : 在complex基礎上實(shí)現了最多分詞(max-word),但是還不成熟,還有很多需要改進(jìn)的地方。
ik : 針對Lucene全文檢索優(yōu)化的查詢(xún)分析器IKQueryParser
8. 結論
個(gè)人覺(jué)得,可以在 mmseg4j 和 paoding 中選一個(gè)。關(guān)于這兩個(gè)分詞效果的對比,可以參考:
http://blog.chenlb.com/2009/04/mmseg4j-max-word-segment-compare-with-paoding-in-effect.html
或者自己再包裝一下,將 paoding 的詞庫更新檢測做一個(gè)單獨的模塊實(shí)現,然后就可以在所有基于詞庫的分詞算法之間無(wú)縫切換了。
ps,對不同的 field 使用不同的分詞器是一個(gè)可以考慮的方法。比如 tag 字段,就應該使用一個(gè)最簡(jiǎn)單的分詞器,按空格分詞就可以了。
本文來(lái)自:http://blog.fulin.org/2009/08/lucene_chinese_analyzer_compare.html

