手把手教會你使用 Python 進行 jieba 分詞

前言

大家好,我是黃偉。上週我們分享了詞雲,手把手教你使用 Python 打造絢麗的詞雲圖,這次我們來看看分詞。我們從之前學習過的 wordcloud 可以得知它只能進行英文分詞,中文暫不支持,這也正是它美中不足的地方,但是有個模塊正好彌補了這一點,它就是 ----jieba,中文名結巴,沒錯,你沒聽錯也沒看錯,就是結巴。

一、jieba 的使用

1. 安裝

jieba 的安裝不管在哪個地方安裝都是一個老大難的問題,這也真是讓小編頭痛欲裂,幸好小編昨天下好了 (花了一天,不好意思說出口)。。

下載好後,我們解壓它,在文件主目錄中按住 shift 鍵然後右擊選擇‘在此處打開命令窗口’,然後輸入命令:

python setup.py install

安裝即可,可以看到安裝的版本信息:

2.jieba 的分詞模式


一、精確模式

它可以將結果十分精確分開,不存在多餘的詞。

常用函數:lcut(str) 、 cut(str)

比如我隨便找一段話進行拆分:

import jieba
aa=jieba.cut('任性的90後boy')

這樣我們就得到了 aa 這樣一個生成器序列,然後我們將它遍歷即可得到最終結果:

如果不想讓它換行顯示,想讓它在一行顯示並且能看到效果的話,可以這樣做:

很顯然,我的關鍵字太少,導致它的效果不是很明顯,下面增加關鍵字:

經過這次的修改,是不是就清楚多了了。

二、全模式

它可以將結果全部展現,也就是一段話可以拆分進行組合的可能它都給列舉出來了,不信可以來看看

常用函數:

lcut(str,cut_all=True) 、 cut(str,cut_all=True)

還是來看下它的妙處:

可以看到,它將這段話中所有可能的組合都列舉出來了,但是有些組合顯然不是我們想要的。

三、搜索引擎模式

將結果精確分開,對比較長的詞進行二次切分。

lcut_for_search(str) 、cut_for_search(str)

它的妙處在於它可以將全模式的所有可能再次進行一個重組,下面來看下:

這樣就可以看到我們想要的結果了,所以說這種模式十分適合搜索引擎搜索查找功能。

我們還可以使用列表的 count 方法統計出分詞中某個詞出現的頻率:

print(ab.count('武漢')) #這樣的話就是1

通過對上文的瞭解,相信大家對於 lcut 和 cut 的區別還有點陌生,其實 lcut 和 cut 都能達到中文分詞的效果,只是不同的是 lcut 返回的結果是列表,而 cut 返回的是生成器罷了。

3.jieba 的其它應用

1)、添加新詞

它是將本身存在於文本中的詞進行一個重組,讓它成爲一個個體,使之更爲形象而設立的:

可以看到,它現在就可以將我設置的兩個詞連貫起來,這對於名字分詞是很有幫助的,有時候分詞會將三個字甚至是多個字的人名劃分開來,這個時候我們就需要用到添加新詞了。當然,如果你添加了文本中沒有的詞,那是沒有任何效果,可以看到:

這個自己定義的是無法顯示在這上面的,jieba 添加新詞只會添加文本里有的詞,如果想添加其它詞,我們得用到字典,添加屬於自己的字典。

2)、添加字典

jieba 可以添加屬於自己的字典,用來切分查找關鍵詞。這樣就可以有效縮小查找範圍,從而使得匹配完成度更高,時間更短。我們可以使用 load_userdict 函數來讀取自定義詞典,它需要傳入一個文件名,格式如下:

#文件一行只可寫三項參數,分別爲詞語、詞頻(可省略)、詞性(可省略)空格隔開,順序不可顛倒
jieba.load_userdict(file)

這樣就可以讀取到該文件中的所有文本,然後我們讓它去匹配我們要進行分詞的文本,然後利用三大模式中的一種就可以精確匹配到要查找的內容。

可以看到,我們成功匹配到了以文件字典爲結構體的內容,這樣我們就可以更加精確的匹配到結果而不至於添字掉字。

3)、刪除新詞

有添加肯定就有刪除,那麼刪除新詞是怎麼一回事呢?如果我們對自己所添加的新詞不滿意,可以直接刪除,這樣就可以。

可以看到,分詞結果又回到了原來的形式,不過由於我只刪除了一個,所以另一個保留,依然是‘湖北武漢’。

4)、處理停用詞

在有時候我們處理大篇幅文章時,可能用不到每個詞,需要將一些詞過濾掉,這個時候我們需要處理掉這些詞,比如我們比較熟悉的‘的’  ‘了’、 ‘哈哈’ 什麼的,這些都是可有可無的詞,下面我們來學習下如何去除:

可以看到,我們成功去除了我們不需要的詞:‘的’,‘了’,‘哈哈’,那麼這到底是個什麼騷操作呢?哦,其實很簡單,就是將這些需要摒棄的詞添加到列表中,然後我們遍歷需要分詞的文本,然後進行判讀,如果遍歷的文本中的某一項存在於列表中,我們便棄用它,然後將其它不包含的文本添加到字符串,這樣生成的字符串就是最終的結果了。

5)、權重分析

很多時候我們需要將關鍵詞以出現的次數頻率來排列,這個時候就需要進行權重分析了,這裏提供了一個函數可以很方便我們進行分析,

可以看到它將字符串中出現頻率最高的幾個詞按順序排列了出來,如果你想打印出這幾個詞的頻率的話,只需添加一個 withWeight 參數即可:

那麼這些參數是什麼意思呢?哦,原來 topK 就是指你想輸出多少個詞,withWeight 指輸出的詞的詞頻。

6)、調節單個詞語的詞頻

在分詞過程中,我們可以將某個詞顯示進行劃分。不過,詞頻在使用 HMM 新詞發現功能時可能無效,需要將它設置爲 False。

aa=jieba.lcut('我再也回不到童年美好的時光了,哈哈,想想都覺得傷心了',HMM=False) #爲調節詞頻做準備
print('/'.join(aa))
jieba.suggest_freq(('美','好'),tune=True)#加上tune參數表示可以劃分
aa=jieba.lcut('我再也回不到童年美好的時光了,哈哈,想想都覺得傷心了',HMM=False)
print('/'.join(aa)) #生成新詞頻

可以看到它將美和好分開了。

7)、查看文本內詞語的開始和結束位置

有時候我們爲了得到某個詞的準確位置以及分佈情況我們可以使用函數 tokenize() 來定位。

8)、修改字典路徑

如果你覺得當前使用字典無法滿足要求,你可以重新設置字典,剛纔我們介紹了讀取字典、添加字典、刪除字典的方法,現在我們來說一種重新設置字典的方法,它就是:jieba.set_dictionary(file),裏面還是加的文件名,但是你在重新設置前必須要初始化 jieba,不然可能設置失誤,方法如下:

import jieba
jieba.initialize() #初始化jeiba
jieba.set_dictionary('OSI.txt') #設置字典

四、總結


jieba 這款分詞工具,總體來說還是挺厲害的,我們可以用它來獲取並過濾許多對於我們來說比較核心的東西,它就等於數據分析中的一塊敲門磚,當然它只是其中的一塊而已,哈哈哈。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/YJx_B5_98FGv-NnYQvts6Q