引言
Python系列前面的文章中,我们介绍了Python中容器的基本使用,上一篇中,我们又重点介绍了Counter计数器的使用。这些介绍,应该足以应付日常的工作需求了。
在今天的文章中,我想以词云图的生成这个综合案例,巩固一下前面关于容器、字典推导式、Counter的使用。同时,介绍两个比较好用三方模块:jieba和wordcloud。
本文的主要内容有:
1、jieba模块的简单介绍
2、wordcloud模块的简单介绍
3、《红楼梦》词云图的生成
jieba模块的简单介绍
jieba是一个比较好用的中文分词库,它能够很高效地进行中文文本的分词处理,也能支持词性的标注。
由于是三方模块,使用之前,首先是jieba模块的安装:
pip3 install jieba
然后,我们可以看下jieba模块中cut()函数的定义,因为我们接下来主要用到的就是分词功能:
从定义中可以看到,cut()函数支持两种分词模式,通过cut_all这个bool参数来决定:cut_all=False时,进行更精准的分词,适合进行文本分析;当cut_all=True时,会将所有可以成词的词语都扫描出来,速度更快,但是可能存在歧义问题。
定义中还有一个函数,是我们要用到的,即load_userdict(),用于定义我们自定义的词语,提示模块不要切分了,主要还一些人名:
以纯文本的形式存储,词语、频度、词性,其实可以只有词语。
wordcloud模块的简单介绍
wordcloud是一个用于生成词云图的三方模块,可以自定义文字大小、颜色等,可以更加直观地查看词语的出现频度。
同样需要先安装该模块:
pip3 install wordcloud
简单看下WordCloud类的定义:
WordCloud的构造方法的可选参数比较多。不过,我们可以只用到这三个就行了:
1、font_path:自定义一个字体文件的路径,由于是要生成中文的词云图,必须要指定一个中文字体,若是英文词云图,默认字体也是可以的。
2、width:指定词云图的宽度,默认为400,有点小。
3、height:指定词云图的高度,默认为200,有点小。
完整的参数有点多:
后续,感兴趣的话,可以自行研究,生成更加灵活多样化的词云图。
除了WordCloud的构造方法外,要生成一个词云图,还需要两个函数:
1、generate_from_frequencies()或者generate_from_text():以词频dict或者词语串,来生成词云图。
2、to_file():用于将生成的词云图保存成图片。也可以使用to_svg()方法导出svg格式。
《红楼梦》词云图的生成
准备工作已然就绪,接下来我们以《红楼梦》小说的全文为基础,生成一幅词云图,从而看下谁才是红楼梦中真正的主角。这个案例会将前面文章中的一些知识用起来。
直接看代码:
from collections import Counter
import jieba
from wordcloud import WordCloud
wc = WordCloud(font_path='./msyh.ttf', width=1920, height=1024)
jieba.load_userdict('./hlm_dict.txt')
words = jieba.cut(open('《红楼梦》.txt', 'r').read(), cut_all=False)
c = Counter(words)
# 过滤掉单个字(大部分是停用词)、标点符号、异常符号等,然后再传入wc
w_f = {k: v for k, v in c.items() if len(k) > 1 and k != 'page' and ('“' not in k) and ('”' not in k)}
wc.generate_from_frequencies(w_f)
wc.to_file('红楼梦词云图.png')
去除注释及空行,刚好10行代码……
这些代码本身并不复杂,都是前面已经用过的知识。
看下生成的词云图:
总结
本文介绍了三方模块jieba和wordcloud的安装及简单使用。然后结合前面介绍的Python中关于容器的使用、Counter,以10行代码实现了对《红楼梦》全文的中文分词、词频统计及词云图的生成。希望这篇文章对您学习使用Python能有所帮助。
关注公众号“南宫里的日知录”,后台回复“红楼梦”,获取文章相关材料及源码。
标签:代码生成,jieba,cut,20,10,云图,wordcloud,模块,生成 From: https://blog.csdn.net/dqrcsc/article/details/140606018