第一步:安装相关包
主要有两个,一个是wordcloud,用来生成词云图,另一个是jieba,用来对我的文本进行分词。如果没有的话,就直接用pip在命令行里安装。
pip install wordcloudpip install jieba
安装完成后导入
from wordcloud import WordCloudimport jieba
第二步:读取文本并分词
我从网上下载了一份新冠肺炎的相关材料,并保存为“新冠肺炎.txt”,打开后如图所示:
然后读取文件,并用jieba对文本进行分词:
with open('新冠肺炎.txt') as f: # 读取文本 text = f.read()text = text.replace('', "") # 将回车字符删除text_cut = jieba.lcut(text) # 分词,每个词作为一个元素,放在列表里text_cut = ' '.join(text_cut) # 用空格将分好的词连接在一起
第三步:生成词云图
word_cloud = WordCloud(font_path="simsun.ttc", # 设置词云字体 background_color="white", # 词云图的背景颜色 width=2000, height=1600)word_cloud.generate(text_cut)word_cloud.to_file('词云图.png')
运行上面代码后,就会生成一个“词云图.png”文件,打开后如图:
第四步:额外操作
第一点,如果不想让一些词出现在词云图里怎么办,比如我不想出现“人员”、“工作”、“直接”、“根据”、“或者”这五个词,那么就将它们作为停用词,并传给WordCloud类中stopwords参数。
# 制造停用词stopwords_list = ['人员', '工作', '直接', '根据', '或者']my_stopwords = set(STOPWORDS) # 这里的STOPWORDS是从wordcloud导入的一个变量for i in stopwords_list: my_stopwords.add(i)# 使用WordCloud生成词云word_cloud = WordCloud(font_path="simsun.ttc", # 设置词云字体 background_color="white", # 词云图的背景颜色 width=2000, height=1600, stopwords=my_stopwords) # 停用词word_cloud.generate(text_cut)word_cloud.to_file('词云图.png')
现在将生成的图片打开,就看不到被停用的词啦:
第二点,如何让词云图具有某种形状,比如我想让我的词云图呈现出一个口罩的形状,那就要准备好一个口罩图片,我将其命名为“N95.jpg”,如图:
然后读取图片,并将其转成numpy数组格式,传给WordCloud类中的mask参数。
# 加入图片background = Image.open("N95.jpg") #from PIL import Image 没有的话,就用pip install pillow安装PIL包graph = np.array(background) # import numpy as np 这没啥可说的# 使用WordCloud生成词云word_cloud = WordCloud(font_path="simsun.ttc", # 设置词云字体 background_color="white", # 词云图的背景颜色 width=2000, height=1600, stopwords=my_stopwords, # 停用词 mask=graph) # 词云图的形状 word_cloud.generate(text_cut)word_cloud.to_file('词云图.png')
现在生成的词云图就具有口罩的形状啦:
第三点,WordCloud类中的background_color参数默认值是black,但我在本文中使用的是white,因为头条文章的背景色就是白色,这样显得与背景色比较相融。该参数使用的原则就是尽量与我们大环境的背景色相同,如果使用默认的black,效果如下:
关注微信公众号“Python小镇”,发现更多干货知识!