中文分詞是中文文本處理的一個基礎性工作,然而長久以來,在Python程式設計領域,一直缺少高準确率、高效率的分詞元件。結巴分詞正是為了滿足這一需求。
特性:
支援兩種分詞模式:
預設模式,試圖将句子最精确地切開,适合文本分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來,适合搜尋引擎。
用法:
全自動安裝:easy_install jieba
半自動安裝:先下載下傳http://pypi.python.org/pypi/jieba/ ,解壓後運作python setup.py install
手動安裝:将jieba目錄放置于目前目錄或者site-packages目錄,通過import jieba 來引用 (第一次import時需要建構Trie樹,需要幾秒時間)
算法:
基于Trie樹結構實作高效的詞圖掃描,生成句子中漢字構成的有向無環圖(DAG)
采用了記憶化搜尋實作最大機率路徑的計算, 找出基于詞頻的最大切分組合
對于未登入詞,采用了基于漢字位置機率的模型,使用了Viterbi算法
接口:
元件隻提供jieba.cut 方法用于分詞
cut方法接受兩個輸入參數:
1) 第一個參數為需要分詞的字元串
2) cut_all參數用來控制分詞模式
待分詞的字元串可以是gbk字元串、utf-8字元串或者unicode
jieba.cut傳回的結構是一個可疊代的generator,可以使用for循環來獲得分詞後得到的每一個詞語(unicode),也可以用list(jieba.cut(...))轉化為list
>>> import jieba
>>> seg_list = jieba.cut("我來到北京清華大學",cut_all=True)
>>> print "Full Mode:", "/ ".join(seg_list) #全模式
Building Trie..., from /usr/local/lib/python2.7/dist-packages/jieba-0.32-py2.7.egg/jieba/dict.txt
dumping model to file cache /tmp/jieba.cache
loading model cost 2.90168094635 seconds.
Trie has been built succesfully.
Full Mode: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學
>>> seg_list = jieba.cut("我來到北京清華大學",cut_all=False)
>>> print "Default Mode:", "/ ".join(seg_list) #預設模式
Default Mode: 我/ 來到/ 北京/ 清華大學
>>> seg_list = jieba.cut("他來到了網易杭研大廈")
>>> print ", ".join(seg_list)
他, 來到, 了, 網易, 杭研, 大廈