[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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章