1. 程式人生 > >自然語言處理之中文分詞器-jieba分詞器詳解及python實戰

自然語言處理之中文分詞器-jieba分詞器詳解及python實戰

中文分詞是中文文字處理的一個基礎步驟,也是中文人機自然語言互動的基礎模組,在進行中文自然語言處理時,通常需要先進行分詞。本文詳細介紹現在非常流行的且開源的分詞器結巴jieba分詞器,並使用python實戰介紹。

jieba分詞演算法使用了基於字首詞典實現高效的詞圖掃描,生成句子中漢字所有可能生成詞情況所構成的有向無環圖(DAG), 再採用了動態規劃查詢最大概率路徑,找出基於詞頻的最大切分組合,對於未登入詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法。(這裡面很多概念小修之前的文章都有陸續講過哦)

jieba分詞支援三種分詞模式:

1. 確模式, 試圖將句子最精確地切開,適合文字分析:

2. 全模式,把句子中所有的可以成詞的詞語都掃描出來,速度非常快,但是不能解決歧義;

3. 搜尋引擎模式,在精確模式的基礎上,對長詞再詞切分,提高召回率,適合用於搜尋引擎分詞。

jiaba分詞還支援繁體分詞和支援自定義分詞

1jieba分詞器安裝

在python2.x和python3.x均相容,有以下三種:

1. 全自動安裝:easy_install jieba 或者 pip install jieba / pip3 install jieba

2. 半自動安裝: 先下載,網址為: http://pypi.python.org/pypi/jieba, 解壓後執行: python setup.py install

3. 手動安裝: 

將jieba目錄放置於當前目錄或者site-packages目錄,

jieba分詞可以通過import jieba 來引用

2jieba分詞主要功能

先介紹主要的使用功能,再展示程式碼輸出。jieba分詞的主要功能有如下幾種:

1. jieba.cut:該方法接受三個輸入引數:需要分詞的字串; cut_all 引數用來控制是否採用全模式;HMM引數用來控制是否適用HMM模型

2. jieba.cut_for_search:該方法接受兩個引數:需要分詞的字串;是否使用HMM模型,該方法適用於搜尋引擎構建倒排索引的分詞,粒度比較細。

3. 待分詞的字串可以是unicode或者UTF-8字串,GBK字串。注意不建議直接輸入GBK字串,可能無法預料的誤解碼成UTF-8,

4. jieba.cut 以及jieba.cut_for_search返回的結構都是可以得到的generator(生成器), 可以使用for迴圈來獲取分詞後得到的每一個詞語或者使用

5. jieb.lcut 以及 jieba.lcut_for_search 直接返回list

6. jieba.Tokenizer(dictionary=DEFUALT_DICT) 新建自定義分詞器,可用於同時使用不同字典,jieba.dt為預設分詞器,所有全域性分詞相關函式都是該分詞器的對映。

程式碼演示:


其中下面的是輸出結果。

3jieba分詞器新增自定義詞典

jieba分詞器還有一個方便的地方是開發者可以指定自己的自定義詞典,以便包含詞庫中沒有的詞,雖然jieba分詞有新詞識別能力,但是自行新增新詞可以保證更高的正確率。

使用命令:

jieba.load_userdict(filename) # filename為自定義詞典的路徑

在使用的時候,詞典的格式和jieba分詞器本身的分詞器中的詞典格式必須保持一致,一個詞佔一行,每一行分成三部分,一部分為詞語,一部分為詞頻,最後為詞性(可以省略),用空格隔開。下面其中userdict.txt中的內容為小修新增的詞典,而第二部分為小修沒有新增字典之後對text文件進行分詞得到的結果,第三部分為小修新增字典之後分詞的效果。


4利用jieba進行關鍵詞抽取

這裡介紹基於TF-IDF演算法的關鍵詞抽取(乾貨|詳解自然語言處理之TF-IDF模型和python實現), 只有關鍵詞抽取並且進行詞向量化之後,才好進行下一步的文字分析,可以說這一步是自然語言處理技術中文字處理最基礎的一步

jieba分詞中含有analyse模組,在進行關鍵詞提取時可以使用下列程式碼


當然也可以使用基於TextRank演算法的關鍵詞抽取:


這裡舉一個例子,分別使用兩種方法對同一文字進行關鍵詞抽取,並且顯示相應的權重值。


5jieba分詞的詞性標註

jieba分詞還可以進行詞性標註,標註句子分詞後每個詞的詞性,採用和ictclas相容的標記法,這裡知識簡單的句一個列子。


6jieba分詞並行分詞

jieba分詞器如果是對於大的文字進行分詞會比較慢,因此可以使用jieba自帶的並行分詞功能進行分詞,其採用的原理是將目標文字按照行分割後,把各行文字分配到多個Python程序並行分詞,然後歸併結果,從而獲得分詞速度可觀的提升。

該過程需要基於python自帶的multiprocessing模組,而且目前暫時不支援windows. 在使用的時候,只需要在使用jieba分詞匯入包的時候同時加上下面任意一個命令:


在第五步進行關鍵詞抽取並且計算相應的TF-iDF就可以進行後續的分類或者預測,推薦的相關步驟,後面小修會陸續介紹。

參考內容:

[1] jieba分詞github介紹文件:https://github.com/fxsjy/jieba

歡迎關注公眾號學習自然語言處理技術