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

人人可以學(xué)Python.png

分詞模塊jieba,說(shuō)話結(jié)巴的jieba。它是python比較好用的分詞模塊, 支持中文簡(jiǎn)體,繁體分詞,還支持自定義詞庫(kù)。
主要講jieba的分詞,提取關(guān)鍵詞,自定義詞語(yǔ),詞庫(kù)切換這幾個(gè)功能。

安裝jieba#####

命令安裝:

pip install jieba
(venv) allenwoo@~/renren$ pip install jieba
Collecting jieba
Installing collected packages: jieba
Successfully installed jieba-0.38

分詞cut
jieba.cut()分詞提供了多種模式:全模式,精確模式,搜索引擎模式
全模式:速度塊,掃描成詞的詞語(yǔ),但時(shí)會(huì)出現(xiàn)歧義的詞語(yǔ)
精確模式:盡可能最準(zhǔn)確非切分詞語(yǔ),比較適合作文本分析
搜索引擎模式:就是精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率
例子:

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

運(yùn)行下:

(venv) allenwoo@~/renren$ python test.py 
Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/5c/0vmv6d5d2pqdwfl78gc436zw0000gn/T/jieba.cache
Loading model cost 0.438 seconds.
Prefix dict has been built succesfully.
全模式分詞結(jié)果: 人人,編程,時(shí),我們,,,適合,合編,編程,初學(xué),初學(xué)者,學(xué)者,學(xué)習(xí),python,的,教材,,,也,是,好,專(zhuān)業(yè),的,童鞋,關(guān)注,學(xué)習(xí)

精確模式分詞結(jié)果: 人人,編程,時(shí),我們,,,適合,編程,初學(xué)者,學(xué)習(xí),python,的,教材,,,也,是,好,專(zhuān)業(yè),的,童鞋,關(guān)注,學(xué)習(xí)

搜索引擎模式分詞結(jié)果: 人人,編程,時(shí),我們,,,適合,編程,初學(xué),學(xué)者,初學(xué)者,學(xué)習(xí),python,的,教材,,,也,是,好,專(zhuān)業(yè),的,童鞋,關(guān)注,學(xué)習(xí)

解釋?zhuān)簭慕Y(jié)果可以看出"全模式"有不少歧義,比如適合,合編,編程,初學(xué),初學(xué)者,學(xué)者,而精確模式的結(jié)果是:適合,編程,初學(xué)者
執(zhí)行前jieba會(huì)初始化加載詞庫(kù),如下

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

附:如果不希望每次都加載詞庫(kù),可以讓jieba初始化后再后臺(tái)一直運(yùn)行
比如在flask中使用的時(shí)候應(yīng)該在初始化app文件中初始化jieba,然后其他程序再調(diào)用初始化后的,這個(gè)之后講flask的時(shí)候會(huì)講到

關(guān)鍵字提取nalyse.extract_tags:#####
jieba.analyse.extract_tags(sentence,topK)
sentence: 文本字符串
topK:  前幾個(gè),默認(rèn)時(shí)20

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

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

結(jié)果

python,編程,第三方,框架,童鞋,web,flask,學(xué)習(xí),初學(xué)者,關(guān)注,模塊,講解,一些,人人,公眾,適合,專(zhuān)業(yè),基礎(chǔ),使用,我們
python,編程,第三方
一共有46個(gè)詞
取5%數(shù)量的關(guān)鍵詞:2個(gè)
python,編程

jieba動(dòng)態(tài)添加自定義詞

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

結(jié)果

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

我們也可以自己定義了詞庫(kù),需要使用的時(shí)候把我們自定義的詞庫(kù)也load進(jìn)來(lái),這樣jieba就會(huì)同時(shí)使用 “jieba初始化時(shí)加載的詞庫(kù)” 和 “我們自定義的詞庫(kù)”
在我們本地下新建一個(gè)文件renren-dict.txt, 寫(xiě)入一個(gè)詞語(yǔ)

(venv) allenwoo@~/renren$ cat renren-dict.txt 
python人 5 nz
  #!/usr/bin/python
# -*- coding: UTF-8 -*- 
import jieba
strt = "我們python人,玩蛇者" 
sl = jieba.cut(strt)
print "[加載自定義詞庫(kù)前]:","/".join(sl)
 
# 加載自定義詞庫(kù)
jieba.load_userdict("./renren-dict.txt")
sl = jieba.cut(strt)
print "[加載自定義詞庫(kù)后]:", "/".join(sl)

結(jié)果

[加載自定義詞庫(kù)前]: 我們/python/人/,/玩蛇者
[加載自定義詞庫(kù)后]: 我們/python人/,/玩蛇者
因?yàn)槲覀冏远x的詞庫(kù)將 “python人”定義為一個(gè)詞了

詞庫(kù)切換:
上面的load_userdict時(shí)加載自定義詞庫(kù)和jieba初始化詞庫(kù)一同使用
但是,默認(rèn)的初始化詞庫(kù)放在安裝目錄下,很多時(shí)候我們需要替換掉它,替換成我們覺(jué)得更全面的詞庫(kù)。還有時(shí)候我們需要將它放到自己的目錄下面。
這個(gè)時(shí)候我們就可以使用jieba的詞庫(kù)切換功能set_dictionary()
我們可以將jieba默認(rèn)詞庫(kù)copy到我們自己目錄下,也可以網(wǎng)上尋找更全面的詞庫(kù)
(ubuntu)默認(rèn)詞庫(kù)路徑在模塊安裝路徑下:
如果是虛擬環(huán)境

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

例子:

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

如果我們切換了詞庫(kù),這個(gè)時(shí)候程序就會(huì)初始化我們指定的詞庫(kù),而不加載默認(rèn)路徑的詞庫(kù)

(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.cache
Loading model cost 0.003 seconds.
Prefix dict has been built succesfully.
我們/python人/,/玩蛇者
```python
jieba的功能還沒(méi)講完,之后繼續(xù).
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容