1. 程式人生 > >[python] jieba 模組 -- 給中文文字分詞

[python] jieba 模組 -- 給中文文字分詞

在文字處理時,英文文字的分詞一直比中文文字要好處理許多。因為英文文字只需要通過空格就可以分割,而中文的詞語往往就很難從句子中分離出來。這種時候我們往往需要一個“詞典”來實現分詞,而尋找“詞典”又是件非常麻煩的事。

不過, python 強大的第三方模組中早有了解決方案。在 PyPI 上面搜尋“中文分詞”,第一個出現的就是 jieba 模組。其實 jieba 模組的官方文件已經足夠詳細了,所以這裡就對其進行一定的精簡,只介紹幾個常用的函式。

1. 使用 pip 安裝 jieba 模組

在第一次使用時,我們需要先使用 pip 指令安裝 jieba 這個第三方模組:

pip install jieba

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

lcut() 這個函式只有簡單的兩個引數: lcut(s, cut_all=False) ,而它在切分後會返回一個字串。其中 s 是傳入的中文字串,而 cut_all 這個引數預設為 False ,預設為“精確模式”,而如果設定為 True ,就是“全模式”。那麼這兩個模式有什麼區別呢?我們可以檢視下官方文件中的示例:

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() 這個函式一般在使用時只需要填寫第一個引數,就是待分詞的字串。繼續看官方文件的示例:

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

分詞的結果:

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

這樣分解之後的列表就比較適用於搜尋引擎使用了。但是在統計時並不適合這樣使用,因為會有重複,還會有歧義。

4. 為 jieba 設定多程序分詞

並行分詞並不適用於 Windows 平臺,如果想要嘗試的話可以使用 Linux 虛擬機器

當文字較短時,分詞所使用的時間還比較可觀。但是當你從一個檔案中讀取一大串的文字時,處理的時間就會十分長。這種情況下 jieba 可以通過設定多程序的方式來並行分詞。這樣可以提高分詞效率。

其中,我們可以通過 enable_parallel() 這個函式來開啟多程序分詞,而使用 disable_parallel() 可以關閉多程序。

jieba.enable_parallel(4) # 開啟並行分詞模式,引數為並行程序數
jieba.disable_parallel() # 關閉並行分詞模式

在文字過短時,多程序反而會降低執行效率。所以一般只有在拆分大量文字時再使用並行分詞

結語與其他文件

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