记录中文分词库jieba的使用、参数及样板
之前简单的介绍了jieba库的使用,python 数据词云展示实例(1)- 京东商品评论。
本文记录一下jieba库的一些常用参数
官方github https://github.com/fxsjy/jieba
分词
jieba.cut
方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型。返回一个迭代器。
jieba.lcut
使用同上,但是返回的是 list
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
输出为:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】: 我/ 来到/ 北京/ 清华大学
【默认】:他, 来到, 了, 网易, 杭研, 大厦
关键词提取
主要有两种方法:基于 TF-IDF 算法的关键词抽取和基于 TextRank 算法的关键词抽取。
在jieba里面的名称为:jieba.analyse.extract_tags
和jieba.analyse.textrank
需要注意的是:前者默认不过滤词性,后者则默认会过滤词性('ns', 'n', 'vn', 'v')(可参考文末的词性表)
jieba.analyse.extract_tags
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选
jieba.analyse.textrank
import jieba.analyse
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 直接使用,接口相同,注意默认过滤词性。
使用样板
jieba.analyse.extract_tags
'''
读取jd_comment.txt文本内容,通过jieba.analyse.extract_tags方法筛选关键词,绘制词云
'''
import jieba.analyse
from wordcloud import WordCloud,ImageColorGenerator
f=open('/home/yhjbox/Desktop/jd_comments-7.28/example1/jd_comment.txt','r')
contents=f.read()
result=jieba.analyse.extract_tags(contents,topK=1000,withWeight=True)
keywords = dict()
for i in result:
keywords[i[0]]=i[1]
print(keywords)
wc = WordCloud(font_path='/usr/share/fonts/winfonts/simfang.ttf',
background_color='White',
max_words=1000,
width=1000,
height=500,
#mask=graph,
scale=1,
)
#font_path:设置字体,max_words:出现的最多词数量
wc.generate_from_frequencies(keywords)#按词出现的频率
wc.to_file("jd_comment.jpg")
结果显示:
{'舒服': 0.47536917846257937, '不错': 0.225618537521803, '穿着': 0.21326472856393613, '内衣': 0.2016894321875567, '质量': 0.1871072280868928, '非常': 0.13341056610756394, '收到': 0.12721841432032469, '满意': 0.10915776704747325, '喜欢': 0.09516381880606567, '舒适': 0.09206332667271902, '合适': 0.07589358703941229, '面料': 0.07145172159387991, '感觉': 0.06753810395328497, '挺舒服': 0.06688503395338291,.....
jieba.analyse.textrank
'''
读取jd_comment.txt文本内容,通过jieba.analyse.textrank方法筛选关键词,绘制词云
'''
import jieba.analyse
from wordcloud import WordCloud,ImageColorGenerator
f=open('/home/yhjbox/Desktop/jd_comments-7.28/example1/jd_comment.txt','r')
contents=f.read()
result=jieba.analyse.textrank(contents,topK=1000,withWeight=True)
#默认过滤了词,除非加上allowPOS=('ns', 'n', 'vn', 'v')
keywords = dict()
for i in result:
keywords[i[0]]=i[1]
print(keywords)
wc = WordCloud(font_path='/usr/share/fonts/winfonts/simfang.ttf',
background_color='White',
max_words=1000,
width=1000,
height=500,
#mask=graph,
scale=1,
)
#font_path:设置字体,max_words:出现的最多词数量
wc.generate_from_frequencies(keywords)#按词出现的频率
wc.to_file("jd_comment.jpg")
结果显示:
{'质量': 1.0, '穿着': 0.9200055415709553, '内衣': 0.7538668025054438, '没有': 0.6467056992227592, '收到': 0.6429399411659895, '满意': 0.5357806573771569, '购买': 0.4528262852785809, '喜欢': 0.4501107283351987,......
jd_comment.jpg
手动设置过滤词
上述两种方法,如果希望某些个词不要出现在词云当中的话,可以使用jieba.analyse.set_stop_words
方法,把不希望出现的词写在stop.txt文件中,一行一个。
加在jieba.analyse.extract_tags
或者jieba.analyse.textrank
语句之前就可以了。
jieba.analyse.set_stop_words('stop.txt')
如设置不要出现“质量”、“内衣”两个词,两种方法的效果分别如下:
jd_comment.jpg jd_comment.jpg常用词性表
注:jieba分词的词性表如下:
另附词性标注表如下:
- 名词 (1个一类,7个二类,5个三类)
名词分为以下子类:
n 名词
nr 人名
nr1 汉语姓氏
nr2 汉语名字
nrj 日语人名
nrf 音译人名
ns 地名
nsf 音译地名
nt 机构团体名
nz 其它专名
nl 名词性惯用语
ng 名词性语素 - 时间词(1个一类,1个二类)
t 时间词
tg 时间词性语素 - 处所词(1个一类)
s 处所词 - 方位词(1个一类)
f 方位词 - 动词(1个一类,9个二类)
v 动词
vd 副动词
vn 名动词
vshi 动词“是”
vyou 动词“有”
vf 趋向动词
vx 形式动词
vi 不及物动词(内动词)
vl 动词性惯用语
vg 动词性语素 - 形容词(1个一类,4个二类)
a 形容词
ad 副形词
an 名形词
ag 形容词性语素
al 形容词性惯用语 - 区别词(1个一类,2个二类)
b 区别词
bl 区别词性惯用语 - 状态词(1个一类)
z 状态词 - 代词(1个一类,4个二类,6个三类)
r 代词
rr 人称代词
rz 指示代词
rzt 时间指示代词
rzs 处所指示代词
rzv 谓词性指示代词
ry 疑问代词
ryt 时间疑问代词
rys 处所疑问代词
ryv 谓词性疑问代词
rg 代词性语素 - 数词(1个一类,1个二类)
m 数词
mq 数量词 - 量词(1个一类,2个二类)
q 量词
qv 动量词
qt 时量词 - 副词(1个一类)
d 副词 - 介词(1个一类,2个二类)
p 介词
pba 介词“把”
pbei 介词“被” - 连词(1个一类,1个二类)
c 连词
cc 并列连词 - 助词(1个一类,15个二类)
u 助词
uzhe 着
ule 了 喽
uguo 过
ude1 的 底
ude2 地
ude3 得
usuo 所
udeng 等 等等 云云
uyy 一样 一般 似的 般
udh 的话
uls 来讲 来说 而言 说来
uzhi 之
ulian 连 (“连小学生都会”) - 叹词(1个一类)
e 叹词 - 语气词(1个一类)
y 语气词(delete yg) - 拟声词(1个一类)
o 拟声词 - 前缀(1个一类)
h 前缀 - 后缀(1个一类)
k 后缀 - 字符串(1个一类,2个二类)
x 字符串
xx 非语素字
xu 网址URL - 标点符号(1个一类,16个二类)
w 标点符号
wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <
wky 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >
wyz 左引号,全角:“ ‘ 『
wyy 右引号,全角:” ’ 』
wj 句号,全角:。
ww 问号,全角:? 半角:?
wt 叹号,全角:! 半角:!
wd 逗号,全角:, 半角:,
wf 分号,全角:; 半角: ;
wn 顿号,全角:、
wm 冒号,全角:: 半角: :
ws 省略号,全角:…… …
wp 破折号,全角:—— -- ——- 半角:--- ----
wb 百分号千分号,全角:% ‰ 半角:%
wh 单位符号,全角:¥ $ £ ° ℃ 半角:$
网友评论