5 分钟简单生成指定形状的词云

群里有人问,想要做一张这样的指定形状的词云:

photo_2023-04-26_10-26-15.jpg

我试了一下,其实很简单,基本上 5 分钟就搞定。这里的简单思路就是:

  1. 使用 jieba 包对原始文本进行分词处理;
  2. 将分词之后的结果导入 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.