結巴分詞是Python語言中效果最好的分詞工具,其功能包括:分詞、詞性標註、關鍵詞抽取、支援使用者詞表等。這幾天一直在研究這個工具,在安裝與使用過程中遇到一些問題,現在把自己的一些方法帖出來分享一下。
官網地址:https://github.com/fxsjy/jieba
1、安裝。
按照官網上的說法,有三種安裝方式,
- 第一種是全自動安裝:
easy_install jieba
或者 pip install jieba
,可是並沒有找到它提供這個安裝程式。
- 第二種方法是半自動安裝:先下載http://pypi.python.org/pypi/jieba/ ,解壓後在cmd命令列中運行 python setup.py install。這裡需要注意的是,預設情況下,不能在cmd中直接運行python命令,需要把它的路徑加入到環境變數path中方可。我試過,可行。但是 這種方法安裝之後,結巴分詞功能只能在Python內建的IDLE中使用。在含有PyDEV的MyEclipse中不能執行“import
jieba”命令,所以繼續嘗試第三種方法。
- 第三種方法是手動安裝:將jieba目錄放置於目前的目錄或者site-packages目錄。把下載到的jieba-0.30.zip解壓後,裡面有個jibba的檔案夾,把它複製到與你的Python程式相同的位置,這樣在程式中就可以執行“import jieba”了。
2、關於分詞的實現
官網提供了分詞的基本用法樣本 :
#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)seg_list = jieba.cut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造") # 搜尋引擎模式print ", ".join(seg_list)
程式可以執行,但是在MyEclipse中顯示中文為Unicode編碼,這不科學。
但是繼續執行另一個詞性標註的樣本卻非常正常:
import jieba.posseg as psegwords = pseg.cut("我愛北京天安門")for w in words: print w.word, w.flag
所以我就想去分析一下它的原始碼,結果發現在jiba/_init_.py檔案(這是實現分詞的檔案)的第209行(cut函數)中有關於檢查編碼的語句塊:
if not isinstance(sentence, unicode):try:sentence = sentence.decode('utf-8')except UnicodeDecodeError:sentence = sentence.decode('gbk','ignore')
而在jieba/posseg/_init_.py檔案(這是實現詞性標註的檔案)第158行的cut函數中卻沒有發現此類代碼。所以我猜想,前者有檢查編碼的代碼就出現亂碼,而後者沒有檢查編碼的代碼而正常顯示,所以就把前者檢查編碼的代碼給注釋了,結果程式執行報錯,只好又把人家的源碼還原,結果中文又正常顯示了!我靠 我非常的不理解這是為什麼!!
=============================節操分隔線========================================
以上只是對固定的中文字串變數進行分詞和詞性標註,明天我會嘗試從檔案中讀取中文進行分詞和詞性標註。