[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