講python的pypinyin的時候艇挨,我提到了分詞模塊jieba,說話結(jié)巴的jieba韭赘。它是python比較好用的分詞模塊, 支持中文簡體缩滨,繁體分詞,還支持自定義詞庫泉瞻。
那在01這里我主要講jieba的分詞脉漏,提取關(guān)鍵詞,自定義詞語袖牙,詞庫切換這幾個功能侧巨。
安裝jieba####
命令安裝:
pip install jieba
**github里下載安裝**
地址 :https://github.com/fxsjy/jieba
jieba的基本使用:分詞,提取關(guān)鍵字####
分詞cut
jieba.cut()分詞提供了多種模式:全模式鞭达,精確模式司忱,搜索引擎模式
全模式:速度塊,掃描成詞的詞語畴蹭,但時會出現(xiàn)歧義的詞語
精確模式:盡可能最準確非切分詞語坦仍,比較適合作文本分析
搜索引擎模式:就是精確模式的基礎(chǔ)上 ,對長詞再次切分撮胧,提高召回率
例子:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import jieba
strt = "人人編程時我們桨踪,適合編程初學者學習python的教材,也是好專業(yè)的童鞋關(guān)注學習"
# 全模式
sl = jieba.cut(strt, cut_all=True)
print "全模式分詞結(jié)果:", ",".join(sl)
print('\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)
(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é)果: 人人,編程,時,我們,,,適合,合編,編程,初學,初學者,學者,學習,python,的,教材,,,也,是,好,專業(yè),的,童鞋,關(guān)注,學習
精確模式分詞結(jié)果: 人人,編程,時,我們,锻离,,適合,編程,初學者,學習,python,的,教材,,,也,是,好,專業(yè),的,童鞋,關(guān)注,學習
搜索引擎模式分詞結(jié)果: 人人,編程,時,我們,墓怀,,適合,編程,初學,學者,初學者,學習,python,的,教材,汽纠,,也,是,好,專業(yè),的,童鞋,關(guān)注,學習
解釋:從結(jié)果可以看出"全模式"有不少歧義,比如適合,合編,編程,初學,初學者,學者傀履,而精確模式的結(jié)果是:適合,編程,初學者
執(zhí)行前jieba會初始化加載詞庫虱朵,如下
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.
附:如果不希望每次都加載詞庫,可以讓jieba初始化后再后臺一直運行:
比如在flask中使用的時候應(yīng)該在初始化app文件中初始化jieba钓账,然后其他程序再調(diào)用初始化后的碴犬,這個之后講flask的時候會講到
關(guān)鍵字提取nalyse.extract_tags:
jieba.analyse.extract_tags(sentence,topK)
sentence: 文本字符串
topK: 前幾個,默認時20
例子:
注意:import jieba.analyse梆暮,而不是jieba
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import jieba
import jieba.analyse
strt = "人人編程是適合編程初學者學習python關(guān)注的公眾號服协,也是好專業(yè)的童鞋關(guān)注學習。我們講講解python基礎(chǔ)編程啦粹,python一些第三方模塊的使用偿荷,python一些第三方框架如flask web框架等"
# topK 默認為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")
# 有時候我們不確定該取幾個關(guān)鍵詞窘游,這個時候我們可以取總詞的百分比
sl = jieba.cut(strt)
w_cnt = len(list(sl))
print("一共有{}個詞".format(w_cnt))
# 取5%
get_cnt = int(w_cnt*0.05)
print("取5%數(shù)量的關(guān)鍵詞:{}個".format(get_cnt))
keywords = jieba.analyse.extract_tags(strt, topK=get_cnt)
print(",".join(keywords))
python,編程,第三方,框架,童鞋,web,flask,學習,初學者,關(guān)注,模塊,講解,一些,人人,公眾,適合,專業(yè),基礎(chǔ),使用,我們
python,編程,第三方
一共有46個詞
取5%數(shù)量的關(guān)鍵詞:2個
python,編程
jieba動態(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)
[自定義前]: 我/是/巴拉巴/拉小/魔鬼
[自定義后]: 我/是/巴拉巴拉/小魔
自定義詞庫
我們也可以自己定義了詞庫,需要使用的時候把我們自定義的詞庫也load進來跳纳,這樣jieba就會同時使用 “jieba初始化時加載的詞庫” 和 “我們自定義的詞庫”
在我們本地下新建一個文件renren-dict.txt, 寫入一個詞語
(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 "[加載自定義詞庫前]:","/".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到我們自己目錄下逛拱,也可以網(wǎng)上尋找更全面的詞庫
(ubuntu)默認詞庫路徑在模塊安裝路徑下:
如果是虛擬環(huán)境
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.cache
Loading model cost 0.003 seconds.
Prefix dict has been built succesfully.
我們/python人/,/玩蛇者
jieba的功能還沒講完饱狂,還有其他幾個功能就留著下吧