20、Python之容器:红楼主角都有谁?10行代码生成《红楼梦》词云图

引言

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能有所帮助。

关注公众号“南宫里的日知录”,后台回复“红楼梦”,获取文章相关材料及源码。

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南宫理的日知录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值