bdml

python 数据词云展示实例(2)- jieba库的使用

2019-07-29  本文已影响0人  永恒君的百宝箱

记录中文分词库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_tagsjieba.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,.....

jd_comment.jpg

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. 名词 (1个一类,7个二类,5个三类)
      名词分为以下子类:
        n 名词
        nr 人名
        nr1 汉语姓氏
        nr2 汉语名字
        nrj 日语人名
        nrf 音译人名
        ns 地名
        nsf 音译地名
        nt 机构团体名
        nz 其它专名
        nl 名词性惯用语
        ng 名词性语素
  2. 时间词(1个一类,1个二类)
        t 时间词
        tg 时间词性语素
  3. 处所词(1个一类)
        s 处所词
  4. 方位词(1个一类)
        f 方位词
  5. 动词(1个一类,9个二类)
        v 动词
        vd 副动词
        vn 名动词
        vshi 动词“是”
        vyou 动词“有”
        vf 趋向动词
        vx 形式动词
        vi 不及物动词(内动词)
        vl 动词性惯用语
        vg 动词性语素
  6. 形容词(1个一类,4个二类)
        a 形容词
        ad 副形词
        an 名形词
        ag 形容词性语素
        al 形容词性惯用语
  7. 区别词(1个一类,2个二类)
        b 区别词
        bl 区别词性惯用语
  8. 状态词(1个一类)
        z 状态词
  9. 代词(1个一类,4个二类,6个三类)
        r 代词
        rr 人称代词
        rz 指示代词
        rzt 时间指示代词
        rzs 处所指示代词
        rzv 谓词性指示代词
        ry 疑问代词
        ryt 时间疑问代词
        rys 处所疑问代词
        ryv 谓词性疑问代词
        rg 代词性语素
  10. 数词(1个一类,1个二类)
        m 数词
        mq 数量词
  11. 量词(1个一类,2个二类)
        q 量词
        qv 动量词
        qt 时量词
  12. 副词(1个一类)
        d 副词
  13. 介词(1个一类,2个二类)
        p 介词
        pba 介词“把”
        pbei 介词“被”
  14. 连词(1个一类,1个二类)
        c 连词
        cc 并列连词
  15. 助词(1个一类,15个二类)
        u 助词
        uzhe 着
        ule 了 喽
        uguo 过
        ude1 的 底
        ude2 地
        ude3 得
        usuo 所
        udeng 等 等等 云云
        uyy 一样 一般 似的 般
        udh 的话
        uls 来讲 来说 而言 说来
        uzhi 之
        ulian 连 (“连小学生都会”)
  16. 叹词(1个一类)
        e 叹词
  17. 语气词(1个一类)
        y 语气词(delete yg)
  18. 拟声词(1个一类)
        o 拟声词
  19. 前缀(1个一类)
        h 前缀
  20. 后缀(1个一类)
        k 后缀
  21. 字符串(1个一类,2个二类)
        x 字符串
        xx 非语素字
        xu 网址URL
  22. 标点符号(1个一类,16个二类)
        w 标点符号
        wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <
        wky 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >
        wyz 左引号,全角:“ ‘ 『
        wyy 右引号,全角:” ’ 』
        wj 句号,全角:。
        ww 问号,全角:? 半角:?
        wt 叹号,全角:! 半角:!
        wd 逗号,全角:, 半角:,
        wf 分号,全角:; 半角: ;
        wn 顿号,全角:、
        wm 冒号,全角:: 半角: :
        ws 省略号,全角:…… …
        wp 破折号,全角:—— -- ——- 半角:--- ----
        wb 百分号千分号,全角:% ‰ 半角:%
        wh 单位符号,全角:¥ $ £ ° ℃ 半角:$
上一篇 下一篇

猜你喜欢

热点阅读