“結巴”分詞:做最好的Python分片語件

jieforest發表於2012-10-08
中文分詞是中文文字處理的一個基礎性工作,然而長久以來,在Python程式設計領域,一直缺少高準確率、高效率的分片語件。結巴分詞正是為了滿足這一需求。

線上演示:http://209.222.69.242:9000/

特性:

支援兩種分詞模式:

預設模式,試圖將句子最精確地切開,適合文字分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來,適合搜尋引擎。
用法:

全自動安裝: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
程式碼示例:

Python程式碼

CODE:

#encoding=utf-8  
import jieba  
  
seg_list = jieba.cut("我來到北京清華大學",cut_all=True)  
print "Full Mode:", "/ ".join(seg_list) #全模式  
  
seg_list = jieba.cut("我來到北京清華大學",cut_all=False)  
print "Default Mode:", "/ ".join(seg_list) #預設模式  
  
seg_list = jieba.cut("他來到了網易杭研大廈")  
print ", ".join(seg_list)  輸出:

程式碼
Full Mode: 我/ 來/ 來到/ 到/ 北/ 北京/ 京/ 清/ 清華/ 清華大學/ 華/ 華大/ 大/ 大學/ 學  

Default Mode: 我/ 來到/ 北京/ 清華大學  

他, 來到, 了, 網易, 杭研, 大廈    (此處,“杭研”並沒有在詞典中,但是也被Viterbi演算法識別出來了)  

效能:

1.5 MB / Second in Full Mode
350 KB / Second in Default Mode
Test Env: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《圍城》.txt

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/301743/viewspace-745872/,如需轉載,請註明出處,否則將追究法律責任。

相關文章