使用python進行漢語分詞

pythontab發表於2014-10-20

目前我常常使用的分詞有結巴分詞、NLPIR分詞等等

最近是在使用結巴分詞,稍微做一下推薦,還是蠻好用的。

一、結巴分詞簡介

利用結巴分詞進行中文分詞,基本實現原理有三:

基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG)

採用了動態規劃查詢最大機率路徑, 找出基於詞頻的最大切分組合

對於未登入詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法

二、安裝及使用(Linux)

1.下載工具包,解壓後進入目錄下,執行:python setup.py install

Hint:a.一個良好的習慣是,對於下載下來的軟體,先看readme ,再進行操作。(沒有閱讀readme,直接嘗試+百度,會走很多彎路);

     b.當時執行安裝命令時,出現錯誤:no permission!  (有些人可能會遇見這種問題,這是因為許可權不夠的。 執行:sudo !!   其中“!!”表示上一條命令,這裡指的就是上面的安裝命令),使用sudo後便可正常執行。


2.在使用結巴做分詞的時候,一定會用的函式是:jieba.cut(arg1,arg2);這是用於分詞的函式,我們只需要瞭解以下三點,便可使用

  a.cut方法接受兩個輸入引數:第一個引數(arg1)為需要進行分詞的字串,arg2引數用來控制分詞模式。

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

   b.待分詞的字串可以是gbk字串、utf-8字串或者unicode

使用Python的人要注意編碼問題,Python是基於ASCII碼來處理字元的,當出現不屬於ASCII的字元時(比如在程式碼中使用漢字),會出現錯誤資訊:“ASCII codec can't encode character”,解決方案是在檔案頂部加入語句: #! -*- coding:utf-8 -*-  來告訴Python的編譯器:“我這個檔案是用utf-8進行編碼的,你要進行解碼的時候,請用utf-8”。(這裡記住,這個命令一定要加在檔案的最頂部,如果不在最頂部,編碼問題就依然存在,得不到解決)關於編碼的轉換,可以參考博文(ps:個人理解“import sys    reload(sys)   sys.setdefaultencoding('utf-8')”這幾句話與“#! -*- coding:utf-8 -*- ”等價)

    c.jieba.cut返回的結構是一個可迭代的generator,可以使用for迴圈來獲得分詞後得到的每一個詞語(unicode),也可以用list(jieba.cut(...))轉化為list  

3.以下舉例jieba中提供的一個使用方法作為說明:

#! -*- coding:utf-8 -*-
import jieba
seg_list = jieba.cut("我來到北京清華大學", cut_all = True)
print "Full Mode:", ' '.join(seg_list)
 
seg_list = jieba.cut("我來到北京清華大學")
print "Default Mode:", ' '.join(seg_list)

輸出結果為:

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

三、結巴中文分詞的其他功能

1、新增或管理自定義詞典

結巴的所有字典內容存放在dict.txt,你可以不斷的完善dict.txt中的內容。

2、關鍵詞抽取

透過計算分詞後的關鍵詞的TF/IDF權重,來抽取重點關鍵詞。


相關文章