词云图项目实操压缩包,点击右键下载链接文件
你也许没有听过词云,但你很可能已经在很多文章或报道里见过词云。比如这样⏬ :
或者这样⏬:
这就是词云:
从一堆繁杂的网络文本中抽取出频率最高的关键词,并在视觉上突出显示这些关键词,让用户可以快速了解文本的主旨。
这个可能是很多新媒体小伙伴特别想掌握的一个技能,因为有了这个技能就可以做舆情分析。比如在一个电影上映后,当同行还在辛苦解读消息的时候,你利用Python,在一大堆评论中提取出最高频率的关键字生成词云,就能了解大众对这个电影的总体印象。
有了这个技术,做电商的同学可以从另一个角度感受用户意见,即利用词云技术,从用户对公司产品的海量评价中提取出核心词语。
有了这个技术,有志于学术研究的同学也能用上,比如就曾有古代文学专业的同学提取出了李白现存所有诗歌里面的高频词语,制成词云……词云技术更多的使用场景静待你学完后自己挖掘~💕
但前提是,我们今天先学会使用python快速地生成一张词云图片。
目标确定
我们在网上见到的词云图片一般有两种,一种是四四方方的,像一开始给到大家的图片;另一种是有明显的图形轮廓的,像这样。
第二种更有趣一点,对不对?我们今天也会学习第二种,那我们的目标就出来了——根据文本内容生成带轮廓的词云图片。
理解模块
现在,我们的目标已经非常明确。
但是,感觉在基础语法课完全没学过呢,头大……等等……在基础课程结束的最后,我们是不是还练了一招吸星大法?没错,现在正是模块闪亮登场的时候。
Python有许多非常好用的第三方模块,我们可以直接使用这些模块来达成目的,我们只要理解这些模块,就能够马上用起来。
我们在文档中提供了一个词云生成的模块library.py
,大家只需要读懂模块内部代码,再根据自己的具体需要,修改参数,调用模块,就可以生成专属词云图片了。
思路分析
在解读代码前,我们先分析一下模块中生成词云图片的思路。这个很重要,也很简单。
- 第一步,从文本中提取关键字。
- 第二步,将关键字转化为词云图片。
代码实现
前期准备
正式开始代码解读,第一步是模块的调用,词云生成还需要不同模块的配合,我们一个个看。
import jieba
from wordcloud import WordCloud
from PIL import Image
import numpy as np
import os
jieba第三方模块
这个一个中文分词组件。它的作用是将句子拆分成词语。比如”我喜欢风变编程。“,这句话会被拆分成“我/喜欢/风变/编程”这几个词。wordcloud第三方模块中的WordCloud类
wordcloud模块的中文翻译就是词云生成模块,调用它里面的方法可以生成词云。内置模块os
用来获取文件路径。PIL第三方模块中的Image函数
用来打开图片和生成图片。numpy第三方模块
用来进行数学计算。
按理说,对于上面提到的第三方模块jieba
,wordcloud
,PIL
,numpy
,我们需要用pip
提前安装。但是在这里,我们只需要安装好三个模块jieba
, wordcloud
, matplotlib
即可。为什么呢?
这是因为
matplotlib
是python 里常用的绘图库,有这个库的时候,就可以使用PIL
和numpy
了。
另外,如果有同学使用python3,也安装不了PIL
,因为PIL
不支持python3。为了方便,直接安装matplotlib
即可。
第一步:提取文本内容
def word_cloud(text_path, img_path, word_cloud_img, background_color='white'):
with open(text_path, "r", encoding='utf-8') as f:
text = f.read()
cut_content = ' '.join(jieba.cut(text))
第一行,用def
定义了一个名叫word_cloud()
的函数,一共设置了四个参数。其中,第四个参数background_color='white'
将词云图片背景颜色默认设置为白色。
第二行,打开我们要分析的文本文件 text_path
,一般是传入txt文件,并将它的内容保存在text
上。
第三行:读取打开后的text_path
文件,此时text是字符串,而jieba
模块是对字符串类型的数据来进行分词的。(也就是说,无论你最初始的文件格式是什么类型,只要能以字符串的形式呈现,jieba
就能对其进行分词操作)
第四行,使用jieba.cut(text)
,将文本内容生成为一个可迭代的词语生成器(generator
),生成器是一种数据类型(无需深究,知道是一种可迭代的数据序列即可)。
再使用join()
将jieba.cut(text)
变成包含所有词语的字符串,赋值到变量cut_content
上即可。
这样,我们就把一个个的词语从一整个txt文件中提出来了。
第二步:生成词云图片
这里的代码看起来比较复杂,但基本思路也是两部分,先设置词云图片的格式(底片颜色+底片轮廓+字体),再将文本内容转化为图片。我们需要先创建WordCloud类的一个实例wc
,这里设置了三个初始化参数(background_color,mask,font_path)。
1.设置词云图片的格式:格式包含了底片颜色+底片轮廓+字体。
底片颜色:
在第一步定义
word_cloud()
函数时,将background_color
设置成默认参数'white',所以background_color=background_color
等价于background_color=white
(目前支持黑色和白色)
底片轮廓:
img = Image.open(img_path)
是在选择最后呈现出来的词云图片的轮廓。
img_array = np.array(img)
是在将底片转化为数组,因为电脑不能像人一样直接看图片,因此需要将图片转化为数组,这样电脑才能读懂图片。
mask=img_array
是把上面的结果赋值给变量mask
。注意:如果没有这三行代码设置底片轮廓,即默认词云图片的轮廓为矩形。
字体:
font = "./static/simfang.ttf"
是在设置词云图片中文字的字体。(老师在项目包static文件夹提供的是仿宋字体,这里用的是相对路径,如果想换成其他字体,需要写成指定字体文件存放的绝对路径。)
2.将文本内容转化为图片。
wc.generate_from_text(cut_content) #绘制图片
wc.to_file(word_cloud_img) #保存图片
print("词云图片生成成功!")
绘制图片:
wc.generate_from_text(cut_content)
是调用实例的generate_from_text()
方法来从文本内容中绘制词云图片。cut_content
是上面提取文字后的结果
保存图片:
wc.to_file(word_cloud_img)
是调用实例的to_file()
方法来保存图片。参数word_cloud_img
是图片的路径。
最后,是可爱的print
函数,提醒我们程序是否运行成功。
我们的代码解读到此为止。如果还有不懂,别担心,再耐心读两次,将参数对应上,就能明白啦。刚刚接触实际项目,一开始难以上手是非常正常的。
调用模块
我们来看下调用模块的代码,也就是run.py
里面的代码,大体上也是分为三部分:
导入模块
from tools.library import word_cloud
从tools
文件夹里的library
模块调用我们封装好的word_cloud()
函数。
参数赋值
第二部分是赋值给word_cloud()
函数的四个参数。
# 目标文本路径
text_path = "./static/西游记.txt"
# 生产的词云图片的输出路径
word_cloud_img = "word_cloud.png"
# 底片图片的路径
img_path = "./static/zjl.jpg"
# 生产词云图片的底色, 可不写,默认为 白色/white, 目前就支持白色和黑色
background_color='black'
text_path
目标文本路径(将要分析的文本内容的所在位置和名字),建议使用绝对路径。word_cloud_img
生成的词云图片的路径(即将生成的词云图片的命名和位置),建议使用绝对路径。img_path
底片相片路径(生成的词云图片的轮廓,注意这里底片的底色需要是白色),建议使用绝对路径。background_color
生成的词云图片的底色(这里设置为黑色)
⚠️
这里的txt文件和图片老师都放在了static文件夹里面,如果你想换成自己的文件,记得要调整对应的参数,否则会报错哦~
调用方法
第三部分则是运行word_cloud
函数,生成词云图片。
word_cloud(text_path, img_path, word_cloud_img, background_color)
注意哦,当使用相对路径时,python的工作路径要和文档的路径相同,当然如果你使用绝对路径,就不会有这些问题了。
好,以上操作完成后,我们打开word-cloud文件夹,便可以发现我们的词云图片。
除此之外,你还可以尝试着内容和参数,获取自己想要的词云图片。
- 可以尝试更改文本内容(注意,如果你修改了文本的命名,那么在
run.py
文件中也要修改)。 - 可以尝试更改词云图片的底片,或者给词云图片换个底片颜色。
- 使用wordCloud模块还能生成很多不同种类的词云,欢迎有兴趣的小伙伴去 官方文档继续研究哦~
怎么样?成功了吗?成功的话,恭喜你已经学会使用生成词云图片,成为python达人的目标又近了一步!👏👏
如果没成功,要想办法(和同学讨论👬,自己思考🤔,找助教)去解决问题噢!加油加油加油!💪💪💪