词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。
本次实验使用习近平在建党95周年重要讲话做为源文本(xjp.txt),利用WordClound工具进行词云图绘制主要有以下四个步骤:
① 计算关键词
利用JieBa分词工具中的extract_tags工具获取设定数目的关键词。
② 计算关键词词频
计算关键词的词频,用以WordCloud词云图绘制。
③ 加载背景轮廓图
利用WordCloud工具设定关键词呈现区域。
④ 绘制
根据传入的关键词词频,利用WordCloud工具绘制词云图。
# -*- coding:utf-8 -*-
import jieba
from jieba.analyse import extract_tags
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
def generater(**kwargs):
content_name = kwargs['content_name']
content_path = './{}.txt'.format(content_name)
top_k = kwargs['top_k']
bg_name = kwargs['bg_name']
color = kwargs['color']
font_type = kwargs['font_type']
with open(content_path) as f:
content = f.read()
'''
根据TF/IDF提取topK个关键词
'''
tags = extract_tags(sentence=content, topK=top_k)
'''
得到关键词的词频
'''
# 全模式
words = [word for word in jieba.cut(content, cut_all=True)]
words_freq = {}
for tag in tags:
freq = words.count(tag)
words_freq[tag] = freq
'''
设置背景
scipy.misc imread():返回的是 numpy.ndarray 也即 numpy 下的多维数组对象
'''
bg_path = './{}.png'.format(bg_name)
bg_img = imread(bg_path)
font_path = './{}.ttf'.format(font_type)
word_cloud = WordCloud(font_path=font_path, # 设置字体
background_color=color, # 背景颜色
max_words=top_k, # 词云显示的最多词数
max_font_size=100, # 字体最大
mask=bg_img, # 背景图
)
word_cloud.generate_from_frequencies(words_freq)
# # 改变字体颜色
# img_colors = ImageColorGenerator(bg_img)
# # 字体颜色为背景图片的颜色
# word_cloud.recolor(color_func=img_colors)
# 显示图片
plt.imshow(word_cloud)
plt.axis('off') # 不显示坐标轴
plt.show()
# 保存图片
word_cloud_img = './{}_word_cloud.png'.format(content_name)
word_cloud.to_file(word_cloud_img)
if __name__ == '__main__':
generater(content_name='xjp',
color='white',
top_k=66,
bg_name='china', # 默认png
font_type='wryh')
generater()中的参数说明:
加载的背景图片(中国地图):
加载中国地图做为背景轮廓图生成的词云图:
# 改变字体颜色
img_colors = ImageColorGenerator(bg_img)
# 字体颜色为背景图片的颜色
word_cloud.recolor(color_func=img_colors)
当然,字体颜色还有很多其他的表现方式,在这就不一一赘述。
[ 源码地址 ]
说明:
WordClound.py:源码
china.png:背景轮廓图
xjp.txt:文本文件
wryh.ttf:字体文件
xjp_word_cloud.png:生成的效果图文件