中文分詞是中文文本處理的一個基礎性工作,然而長久以來,在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代碼
- #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)
#encoding=utf-8import jiebaseg_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演算法識別出來了)
Full Mode: 我/ 來/ 來到/ 到/ 北/ 北京/ 京/ 清/ 清華/ 清華大學/ 華/ 華大/ 大/ 大學/ 學Default Mode: 我/ 來到/ 北京/ 清華大學他, 來到, 了, 網易, 杭研, 大廈 (此處,“杭研”並沒有在詞典中,但是也被Viterbi演算法識別出來了)
轉自:http://www.iteye.com/news/26184-jieba