[python] jieba 模塊 -- 給中文文本分詞

在文本處理時,英文文本的分詞一直比中文文本要好處理許多。由於英文文本只須要經過空格就能夠分割,而中文的詞語每每就很難從句子中分離出來。這種時候咱們每每須要一個「詞典」來實現分詞,而尋找「詞典」又是件很是麻煩的事。python

不過, python 強大的第三方模塊中早有了解決方案。在 PyPI 上面搜索「中文分詞」,第一個出現的就是 jieba 模塊。其實 jieba 模塊的官方文檔已經足夠詳細了,因此這裏就對其進行必定的精簡,只介紹幾個經常使用的函數。git

1. 使用 pip 安裝 jieba 模塊

在第一次使用時,咱們須要先使用 pip 指令安裝 jieba 這個第三方模塊:github

pip install jieba

2. lcut() -- 最經常使用的分割模式

lcut() 這個函數只有簡單的兩個參數: lcut(s, cut_all=False) ,而它在切分後會返回一個字符串。其中 s 是傳入的中文字符串,而 cut_all 這個參數默認爲 False ,默認爲「精確模式」,而若是設置爲 True ,就是「全模式」。那麼這兩個模式有什麼區別呢?咱們能夠查看下官方文檔中的示例:bash

import jieba

seg_list = jieba.lcut("我來到北京清華大學", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.lcut("我來到北京清華大學", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精確模式
Full Mode: 我/ 來到/ 北京/ 清華/ 清華大學/ 華大/ 大學
Default Mode: 我/ 來到/ 北京/ 清華大學

能夠看到,精確模式下不會有重複的詞,可是全模式雖然會有重複(歧義),但也在必定程度上能夠避免精確分詞時的失誤。函數

可是,上面的切分方式雖然在平常作文本統計時足夠使用,可是它卻不適合搜索引擎使用。由於它的切分還包含了一些較長的詞語,並無對其進行繼續的切分。這個時候咱們就須要使用「搜索引擎模式」進行切分。搜索引擎

3. lcut_for_search() -- 搜索引擎模式

lcut_for_search() 這個函數通常在使用時只須要填寫第一個參數,就是待分詞的字符串。繼續看官方文檔的示例:code

seg_list = jieba.lcut_for_search("小明碩士畢業於中國科學院計算所,後在日本京都大學深造")  # 搜索引擎模式
print(", ".join(seg_list))

分詞的結果:索引

小明, 碩士, 畢業, 於, 中國, 科學, 學院, 科學院, 中國科學院, 計算, 計算所, 後, 在, 日本, 京都, 大學, 日本京都大學, 深造

這樣分解以後的列表就比較適用於搜索引擎使用了。可是在統計時並不適合這樣使用,由於會有重複,還會有歧義。進程

4. 爲 jieba 設置多進程分詞

並行分詞並不適用於 Windows 平臺,若是想要嘗試的話可使用 Linux 虛擬機ip

當文本較短時,分詞所使用的時間還比較可觀。可是當你從一個文件中讀取一大串的文本時,處理的時間就會十分長。這種狀況下 jieba 能夠經過設置多進程的方式來並行分詞。這樣能夠提升分詞效率。

其中,咱們能夠經過 enable_parallel() 這個函數來開啓多進程分詞,而使用 disable_parallel() 能夠關閉多進程。

jieba.enable_parallel(4) # 開啓並行分詞模式,參數爲並行進程數
jieba.disable_parallel() # 關閉並行分詞模式

在文本太短時,多進程反而會下降運行效率。因此通常只有在拆分大量文本時再使用並行分詞

結語與其餘文檔

以上就介紹了 jieba 模塊的簡單使用方法了,這樣基本就能完成經常使用的分詞操做。不過 jieba 模塊也支持自定義詞典,若是你發現分詞效果不夠好,那麼也能夠查閱文檔解決: Github - jieba

相關文章
相關標籤/搜索