5 分钟简单生成指定形状的词云
群里有人问,想要做一张这样的指定形状的词云:
我试了一下,其实很简单,基本上 5 分钟就搞定。这里的简单思路就是:
- 使用
jieba
包对原始文本进行分词处理; - 将分词之后的结果导入
wordcloud
包生成分词。
至于指定形状的需求,需要注意在 WordCloud()
中的 mask
参数导入指定的形状遮罩图片就好,具体的代码如下:
import jieba
from wordcloud import WordCloud
import numpy as np
import PIL.Image as image
# 对分析文本做分词处理
def cut(text):
word_list = jieba.cut(text)
result = " ".join(word_list)
return result
# 读取分析文本,进行分词
with open("D:\\测试文章.txt", 'rb') as fp:
text = fp.read().decode('utf-8')
words = cut(text)
# 设置目标词云的遮罩
mask = np.array(image.open("D:\\测试图片.png"))
# 进行词云分析并生成
test_cloud = WordCloud(
mask = mask,
background_color = '#FFFFFF',
font_path='C:\\Windows\\Fonts\\方正聚珍新仿.TTF'
).generate(text)
image_produce = test_cloud.to_image()
test_cloud.to_file("D:\\生成图片.jpg")
当然,再总结一下完成过程,需要注意这两个小小的翻车点:
- wordcloud 自身不支持中文,直接生成会产生乱码,注意在
WordCloud()
中通过font_path
参数指定本地的中文字体文件(程序第24行); - mask 使用的图片是你想生成的词云的遮罩形状,注意你准备好的图片需要是白色底或者透明底
Over.