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

南宫理的日志录 2024-09-21 17:24:11
引言

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格式。

《红楼梦》词云图的生成

准备工作已然就绪,接下来我们以《红楼梦》小说的全文为基础,生成一幅词云图,从而看下谁才是红楼梦中真正的主角。这个案例会将前面文章中的一些知识用起来。

直接看代码:

去除注释及空行,刚好10行代码……

这些代码本身并不复杂,都是前面已经用过的知识。看下生成的词云图:

总结

本文介绍了三方模块jieba和wordcloud的安装及简单使用。然后结合前面介绍的Python中关于容器的使用、Counter,以10行代码实现了对《红楼梦》全文的中文分词、词频统计及词云图的生成。希望这篇文章对您学习使用Python能有所帮助。

0 阅读:1

南宫理的日志录

简介:深耕IT科技,探索技术与人文的交集