目录
概念界定
词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。
准备
参考:
Python生成词云图太简单了|拿来就用能的Python词云图代码 - 知乎
环境:python3.8,使用库jieba、wordcloud、matplotlib、imageio
库介绍:Jieba库是优秀的中文分词第三方库,中文文本需要通过分词获得单个的词语。Jieba库的分词原理:利用一个中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果。除了分词,用户还可以添加自定义的词组。
WordCloud 是一款python环境下的词云图工具包,同时支持python2和python3,能通过代码的形式把关键词数据转换成直观且有趣的图文模式。
IMAIO是一个Python自带库,它提供了一个简单的接口来读取和写入大量的图像数据,包括动画图像、体积数据和科学格式。它是跨平台的,运行在Python 2 .x和3。x上,并且易于安装。
imageio.imread() #从指定的文件读取图像。返回一个NUMPY数组,该数组带有元数据的元属性。注意,图像数据按原样返回,并且可能不总是具有uTI8的dType(因此可能不同于例如PIL返回)。
实现
首先使用jieba分词获得词和词频的字典。过程可参照我之前的文章:Python 应用-jieba分词1:进行批量文本分词
将分词结果(词和词频)根据给定的图片样式生成词云图(注意原图色调要分明,这里给个小建议:如果是按几个文字展示词云图,向本文这样的,可以使用word做艺术字之后截图),首先将图片转为numpy矩阵,每个元素是一个三维数组(rgb)组成,将矩阵作为参数传入绘制词云图的方法中。
# 绘制词云
jpg = Image.open(r'人才引进.png')#图片形状
mask = np.array(jpg) #将图片转换为数组
print(mask)
# 显示生成的词云图片
my_cloud = WordCloud(
background_color='white', # 设置背景颜色白色
width=1000, height=500, #宽度1000像素,高度860像素
scale=2, # 比列放大 数值越大 词云越清晰
font_path='simhei.ttf', # 设置字体为黑体
mask=mask,
max_words=500,
#random_state=5 # 设置随机生成状态,即多少种配色方案
).generate_from_frequencies(dict(stop_words_counts))#stop_words_counts是分词结果
#image_colors = ImageColorGenerator(jpg)#根据背景图片设置颜色
plt.subplots(figsize=(12,8),dpi=500)
plt.imshow(my_cloud , interpolation='bilinear')# 用plt显示图片
# 显示设置词云图中无坐标轴
plt.axis('off')#去除坐标轴
#plt.show()
my_cloud.to_file("mywordcloud.png")