任务 3 结合新闻数据生成词云图
任务目的
这一步的目标是实现词云图的构建,这里需要用到jieba模块对获取到的新闻数据进行分词,然后使用wordcloud模块生成新闻数据的词云图。完成这一步的操作后,将会在本地生成一个词云图文件。
任务步骤
1.生成词云图代码构建
创建词云图生成文件gen_word_cloud.py
。
在项目目录中执行下方命令,创建获取新闻数据的gen_word_cloud.py
文件:
vim gen_word_cloud.py
按下I
键进入编辑模式,复制下方的代码,粘贴到文件中:
# 导入词云制作库wordcloud和中文分词库jieba
import jieba
import wordcloud
# 导入imageio库中的imread函数,并用这个函数读取本地图片,作为词云形状图片
import imageio
def gen_word_cloud(img_path, txt_path):
"""结合图片和文本文档路径,生成词云图"""
# 读取本地的原始图片
mk = imageio.imread(img_path)
# 构建并配置词云对象w,注意要加scale参数,提高清晰度
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
font_path='msyh.ttc',
mask=mk,
scale=15)
# 对来自外部文件的文本进行中文分词,得到string
print("正在对文本内容进行分词...")
with open(txt_path, encoding='utf-8') as f:
txt = f.read()
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)
# 将string变量传入w的generate()方法,给词云输入文字
w.generate(string)
# 将词云图片导出到当前文件夹
export_pic = 'output_chinamap.png'
print("正在生成词云图...")
w.to_file(export_pic)
print("词云图已成功生成!")
return export_pic
完成实验代码的粘贴后,按下 ESC
键切换到命令模式,并在英文模式下使用命令:wq
保存文件并退出编辑器。
接下来将会对此模块中函数gen_word_cloud
的具体功能进行介绍说明。
2.gen_word_cloud
模块代码解析
接下来将会对此模块的具体功能进行介绍。
注意:下方的代码介绍与上方粘贴的代码相同,主要是为了帮助学员理解代码功能,不需学员进行操作。
构建并配置词云对象
函数的第一部分是构建词云对象:
这里首先使用imageio.imread
方法读取本地的原始图片(实验中对应的图片为chinamap.png
):
mk = imageio.imread(img_path)
读取好的图片,将会作为词云图对象的背景层。
接下来会创建一个词云对象,并配置词云图对象的各项参数:
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
font_path='msyh.ttc',
mask=mk,
scale=15)
各参数说明如下:
参数 | 参数说明 |
---|---|
width | 词云对象生成的图片宽度,默认为400px |
height | 词云对象生成的图片高度,默认为200px |
background_color | 指定词云图片的背景颜色,默认为黑色 |
font_path | 指定字体文件(otf或ttf格式后缀),默认字体为 |
mask | 指定词云的形状,默认为长方形,通过 |
scale | 指定词云图的缩放倍数,默认为1,倍数越大图像越清晰,图像尺寸也会越大 |
这一步的操作只是创建一个词云对象,词云图会在稍后生成。
对新闻内容进行分词
这一步的分词操作主要用到了jieba分词模块,首先需要读取新闻内容,作为接下来进行分词的对象:
with open(txt_path, encoding='utf-8') as f:
txt = f.read()
经过这一步的操作后,可以将获取到的新闻内容读取到名为txt
的对象中,接下来使用jieba模块进行分词操作,得到分词后的文本列表:
txtlist = jieba.lcut(txt)
此处使用的是jieba.lcut
方法,此方法会直接生成一个列表,列表中的每个元素对应分词后的每一个词。对于完成分词后的列表,接下来通过空格拼接成一个长字符串,这也是稍后生成词云图所需要的参数格式:
string = " ".join(txtlist)
至此生成词云图的准备工作都已经完成,接下来就可以进行生成词云图的操作了。
生成词云图
这一步首先通过词云对象的generate
方法,向词云图对象中输入文字:
w.generate(string)
但是此时仅仅是有了一个包含文本内容的词云对象,本地的词云图文件并没有生成。想要将词云图生成到本地,需要执行词云对象的to_file
方法,并指定词云图的输出路径:
export_pic = 'output_chinamap.png'
w.to_file(export_pic)
return export_pic
这一步分第一行定义了生成的词云图文件路径,第二行执行了词云图文件的生成操作,第三行将词云图的文件路径返回,作为下一步上传词云图至COS存储桶的必要参数。
学员评价