Python分词模块01: jieba安装,分词,提取关键词,自定义分词,切换词库

讲python的pypinyin的时候,我提到了分词模块jieba,说话结巴的jieba。它是python比较好用的分词模块, 支持中文简体,繁体分词,还支持自定义词库。
那在01这里我主要讲jieba的分词,提取关键词,自定义词语,词库切换这几个功能。

安装jieba####

命令安装:

pip install jieba
**github里下载安装**
地址 :https://github.com/fxsjy/jieba

jieba的基本使用:分词,提取关键字####

分词cut
jieba.cut()分词提供了多种模式:全模式,精确模式,搜索引擎模式
全模式:速度块,扫描成词的词语,但时会出现歧义的词语
精确模式:尽可能最准确非切分词语,比较适合作文本分析
搜索引擎模式:就是精确模式的基础上 ,对长词再次切分,提高召回率
例子:

#!/usr/bin/python
# -*- coding: UTF-8 -*- 
import jieba
strt = "人人编程时我们,适合编程初学者学习python的教材,也是好专业的童鞋关注学习" 
# 全模式
sl = jieba.cut(strt, cut_all=True)
print "全模式分词结果:", ",".join(sl)
print('\n')
 
# 精确模式,默认hi精确模式,所以可以不指定cut_all=False
sl = jieba.cut(strt, cut_all=False)
print "精确模式分词结果:", ",".join(sl)
print('\n')
 
# 搜索引擎模式
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.cache
Loading 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.cache
Loading 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 jieba
import jieba.analyse
strt = "人人编程是适合编程初学者学习python关注的公众号,也是好专业的童鞋关注学习。我们讲讲解python基础编程,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")
 
# 有时候我们不确定该取几个关键词,这个时候我们可以取总词的百分比
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 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到我们自己目录下,也可以网上寻找更全面的词库
(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.cache
Loading model cost 0.003 seconds.
Prefix dict has been built succesfully.
我们/python人/,/玩蛇者

jieba的功能还没讲完,还有其他几个功能就留着下吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容