Python分詞模塊jieba (01)-jieba安裝,分詞,提取關鍵詞,自定義分詞,切換詞庫講解

分詞模塊jieba,說話結巴的jieba。它是python比較好用的分詞模塊, 支持中文簡體,繁體分詞,還支持自定義詞庫。

主要講jieba的分詞,提取關鍵詞,自定義詞語,詞庫切換這幾個功能。

安裝jieba

命令安裝:

pip install jieba(venv) allenwoo@~/renren$ pip install jiebaCollecting jiebaInstalling collected packages: jiebaSuccessfully installed jieba-0.38

分詞cut

jieba.cut()分詞提供了多種模式:全模式,精確模式,搜索引擎模式

全模式:速度塊,掃描成詞的詞語,但時會出現歧義的詞語

精確模式:儘可能最準確非切分詞語,比較適合作文本分析

搜索引擎模式:就是精確模式的基礎上,對長詞再次切分,提高召回率

例子:

#!/usr/bin/python# -*- coding: UTF-8 -*- import jiebastrt = "人人編程時我們,適合編程初學者學習python的教材,也是好專業的童鞋關注學習" # 全模式sl = jieba.cut(strt, cut_all=True)print "全模式分詞結果:", ",".join(sl)print(
)# 精確模式,默認hi精確模式,所以可以不指定cut_all=Falsesl = jieba.cut(strt, cut_all=False)print "精確模式分詞結果:", ",".join(sl)print(
)# 搜索引擎模式sl = jieba.cut_for_search(strt)print "搜索引擎模式分詞結果:", ",".join(sl)

運行下:

(venv) allenwoo@~/renren$ python test.py Building prefix dict from the default dictionary ...Loading model from cache /var/folders/5c/0vmv6d5d2pqdwfl78gc436zw0000gn/T/jieba.cacheLoading model cost 0.438 seconds.Prefix dict has been built succesfully.全模式分詞結果: 人人,編程,,我們,,,適合,合編,編程,初學,初學者,學者,學習,python,,教材,,,,,,專業,,童鞋,關注,學習精確模式分詞結果: 人人,編程,,我們,,適合,編程,初學者,學習,python,,教材,,,,,專業,,童鞋,關注,學習搜索引擎模式分詞結果: 人人,編程,,我們,,適合,編程,初學,學者,初學者,學習,python,,教材,,,,,專業,,童鞋,關注,學習

解釋:從結果可以看出"全模式"有不少歧義,比如適合,合編,編程,初學,初學者,學者,而精確模式的結果是:適合,編程,初學者

執行前jieba會初始化載入詞庫,如下

Building prefix dict from the default dictionary ...Loading model from cache /var/folders/5c/0vmv6d5d2pqdwfl78gc436zw0000gn/T/jieba.cacheLoading model cost 0.438 seconds.Prefix dict has been built succesfully.

附:如果不希望每次都載入詞庫,可以讓jieba初始化後再後台一直運行

比如在flask中使用的時候應該在初始化app文件中初始化jieba,然後其他程序再調用初始化後的,這個之後講flask的時候會講到

關鍵字提取nalyse.extract_tags:

jieba.analyse.extract_tags(sentence,topK)sentence: 文本字元串topK: 前幾個,默認時20

例子:

注意:import jieba.analyse,而不是jieba

#!/usr/bin/python# -*- coding: UTF-8 -*- import jiebaimport jieba.analysestrt = "人人編程是適合編程初學者學習python關注的公眾號,也是好專業的童鞋關注學習。我們講講解python基礎編程,python一些第三方模塊的使用,python一些第三方框架如flask web框架等"# topK 默認為20keywords = jieba.analyse.extract_tags(strt)print(",".join(keywords))print("
")keywords = jieba.analyse.extract_tags(strt, topK=3)print(",".join(keywords))print("
")# 有時候我們不確定該取幾個關鍵詞,這個時候我們可以取總詞的百分比sl = jieba.cut(strt)w_cnt = len(list(sl))print("一共有{}個詞".format(w_cnt))# 取5%get_cnt = int(w_cnt*0.05)print("取5%數量的關鍵詞:{}個".format(get_cnt))keywords = jieba.analyse.extract_tags(strt, topK=get_cnt)print(",".join(keywords))

結果

python,編程,第三方,框架,童鞋,web,flask,學習,初學者,關注,模塊,講解,一些,人人,公眾,適合,專業,基礎,使用,我們python,編程,第三方一共有46個詞取5%數量的關鍵詞:2個python,編程

jieba動態添加自定義詞

#!/usr/bin/python# -*- coding: UTF-8 -*- import jiebastrt = "我是巴拉巴拉小魔鬼" sl = jieba.cut(strt)print "[自定義前]:","/".join(sl)# 添加自定義詞jieba.add_word(巴拉巴拉)jieba.add_word(小魔鬼)sl = jieba.cut(strt)print "[自定義後]:", "/".join(sl)

結果

[自定義前]: 我/是/巴拉巴/拉小/魔鬼[自定義後]: 我/是/巴拉巴拉/小魔

我們也可以自己定義了詞庫,需要使用的時候把我們自定義的詞庫也load進來,這樣jieba就會同時使用 「jieba初始化時載入的詞庫」 和 「我們自定義的詞庫」

在我們本地下新建一個文件renren-dict.txt, 寫入一個詞語

(venv) allenwoo@~/renren$ cat renren-dict.txt python人 5 nz

#!/usr/bin/python# -*- coding: UTF-8 -*- import jiebastrt = "我們python人,玩蛇者" sl = jieba.cut(strt)print "[載入自定義詞庫前]:","/".join(sl)# 載入自定義詞庫jieba.load_userdict("./renren-dict.txt")sl = jieba.cut(strt)print "[載入自定義詞庫後]:", "/".join(sl)

結果

[載入自定義詞庫前] 我們/python///玩蛇者[載入自定義詞庫後] 我們/python//玩蛇者因為我們自定義的詞庫將 python人」定義為一個詞了

詞庫切換:

上面的load_userdict時載入自定義詞庫和jieba初始化詞庫一同使用

但是,默認的初始化詞庫放在安裝目錄下,很多時候我們需要替換掉它,替換成我們覺得更全面的詞庫。還有時候我們需要將它放到自己的目錄下面。

這個時候我們就可以使用jieba的詞庫切換功能set_dictionary()

我們可以將jieba默認詞庫copy到我們自己目錄下,也可以網上尋找更全面的詞庫

(ubuntu)默認詞庫路徑在模塊安裝路徑下:

如果是虛擬環境

venv/lib/python2.7/site-packages/jieba/dict.txt

例子:

#!/usr/bin/python# -*- coding: UTF-8 -*- import jieba# 切換詞庫jieba.set_dictionary("./renren-dict.txt")strt = "我們python人,玩蛇者" sl = jieba.cut(strt)print "/".join(sl)

如果我們切換了詞庫,這個時候程序就會初始化我們指定的詞庫,而不載入默認路徑的詞庫

(venv) allenwoo@~/renren$ python test.py Building prefix dict from /Users/allenwoo/renren/renren-dict.txt ...Dumping model to file cache /var/folders/5c/0vmv6d5d2pqdwfl78gc436zw0000gn/T/jieba.ue964acea829f11ec25dab31f363e67bf.cacheLoading model cost 0.003 seconds.Prefix dict has been built succesfully.我們/python//玩蛇者

jieba的功能還沒講完,之後繼續.


推薦閱讀:

聊聊Python,談談未來
Python程序中不同的重啟機制
如何使用PyCharm開發和調試伺服器上的代碼
通俗 Python 設計模式——享元模式

TAG:Python | 編程 | 自學編程 |