基於 Python 的中文分詞方案那種比較好?
"結巴"中文分詞:做最好的Python中文分片語件 "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation module.
https://github.com/fxsjy/jieba歡迎嘗試我們thunlp組發布的THULAC中文詞法分析工具包,包括中文分詞和詞性標註功能,目前包括C++、Python和Java版本。與各常用工具包的性能和效果比較可以參考:THULAC:一個高效的中文詞法分析工具包 。
其實我沒有用過python或其他任何語言的分詞庫,不過恰好在OSChina上看到了幾個python的中文分詞庫,有幾個也是前面一些知友提到的,我把鏈接轉過來吧:
- http://www.oschina.net/project/tag/264/segment?sort=viewlang=25os=0
python調用c庫,可以使用中科院的分詞,感覺還行,就是導入用戶自定義的詞庫存在失敗率,然後還無法調試出原因
今天剛給四款python中文分詞的做了簡單測試http://hi.baidu.com/fooying/item/6ae7a0e26087e8d7eb34c9e8推薦jiebas分詞,支持Python,Java,C++等版本。三種模式:精準,全模式和搜索模式。在使用過程中發現精準模式更為準確,之前寫過一個詞雲的應用,就是用的jieba分詞寫了一個詞雲的應用:地址:https://zhuanlan.zhihu.com/p/30061051
源碼:https://github.com/fxsjy/jieba引用三種模式的介紹和使用:
精確模式
import jieba
s = u"我想和女朋友一起去北京故宮博物院參觀和閑逛。"cut = jieba.cut(s)print "【Output】"
print cutprint ",".join(cut)【Output】我,想,和,女朋友,一起,去,北京故宮博物院,參觀,和,閑逛,。
可見分詞結果返回的是一個生成器(這對大數據量數據的分詞尤為重要)。
全模式
print "【Output】"
print ",".join(jieba.cut(s,cut_all = True))【Output】我,想,和,女朋友,朋友,一起,去,北京,北京故宮,北京故宮博物院,故宮,故宮博物院,博物,博物院,參觀,和,閑逛,,可見全模式就是把文本分成儘可能多的詞。搜索引擎模式
print "【Output】"print ",".join(jieba.cut_for_search(s))【Output】
我,想,和,朋友,女朋友,一起,去,北京,故宮,博物,博物院,北京故宮博物院,參觀,和,閑逛,。閑來無事,寫了兩個分詞程序,一個是基於mmseg的另一個是基於CRF的,目前已經上傳pypi.pip install scsegpip install genius
中科院和哈工大的兩個分詞包就挺好網上有人做了總結,發來給大家參考幾種開源分詞工具的比較
smallseg ; 輕量級,容易使用。
可以試試jieba_fast, 我覺得python jieba太慢,使用 c 重寫了jieba分詞庫中的核心函數,速度得到大幅提升。
特點
- 對兩種分詞模式進行的加速:精確模式,搜索引擎模式
- 利用
cpython
重新實現了 viterbi 演算法,使默認帶 HMM 的切詞模式速度提升 60%左右 - 利用
cpython
重新實現了生成 DAG 以及從 DAG 計算最優路徑的演算法,速度提升 50%左右 - 基本只是替換了核心函數,對源代碼的侵入型修改很少
- 使用
import jieba_fast as jieba
可以無縫銜接原代碼。
安裝說明
代碼目前對 Python 2/3 兼容,對*unix 兼容良好,對 windows 不能保證
- 全自動安裝:
pip install jieba_fast
- 半自動安裝:先下載 http://pypi.python.org/pypi/jieba_fast/ ,解壓後運行
python
setup.pyinstall
性能測試
測試機器 mbp17,i7,16G
測試過程: 先按行讀取文本《圍城》到一個數組裡,然後循環對《圍城》每行文字作為一個句子進行分詞。然後循環對圍城這本書分詞 50 次。分詞演算法分別採用 [開啟 HMM 的精確模式] 、 [關閉 HMM 的精確模式] 、 [開啟 HMM 的搜索引擎模式] 、 [開啟 HMM 的搜索引擎模式] 具體測試數據如下:
可以看出在開啟 HMM 模式下時間縮減了 60%左右,關閉 HMM 時時間縮減了 50%左右。
一致性測試
為了保證 jieba_fast 和 jieba 分詞結果相同,做了如下測試。
對《圍城》,《紅樓夢》分詞結果進行比較,其分詞結果完全一致
---- Test of 圍城 ----
nums of jieba results: 164821
nums of jieba_fast results: 164821
Are they exactly the same? True
----Test of 紅樓夢 ----
nums of jieba results: 597151
nums of jieba_fast results: 597151
Are they exactly the same? True
鳴謝
"結巴"中文分詞原作者: SunJunyi
github: https://github.com/deepcs233/jieba_fast (求 star 哈哈哈 ) 源代碼在 source/ 下
blog: http://deepcs.me
Thulac python 版,但比起java,C++版,還有好幾個重要功能不支持,比如自定義詞典,但基本夠用了
jieba 路過。。。
pynlpir,對ictclas的封裝,最近做畢設正在用,速度和準確率都很好~
hanlp你甚至可以根據作者博客自己寫一個分詞出來
jieba,用過,很不錯
有個 mmseg for python 分詞
我沒用過python語言寫的分詞程序。
分詞這種功能屬於計算密集型功能,需要大量計算,python不適合這種場合,可以考慮python調用c庫。推薦閱讀:
※Python 多線程效率不高嗎?
※Python 開發中有哪些高級技巧?
※excel中想實現使用Python代替VBA,請問應該怎麼做?
※如何優雅的安裝Python的pandas?