环境准备
-
Python, pip安装配置;
-
安装依赖的包(使用
-i url
指定要使用的镜像源,加快下载速度)
pip install wordcloud scipy jieba
如果下载速度太慢,加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
使用国内镜像下载即可。
- 文件准备:
- 要分析的文本文件(当然也可以在代码中直接写字符串)。
- 中文字体文件(必须设置,否则中文词云图会显示小方块样式的乱码)
可以在Windows系统中搜索.ttf
结尾的,便是字体文件,我选的是simfang.ttf
。 - 背景文件
默认会生成矩形图片(文字为彩色),如果想生成指定样式的词云(包括重设颜色),可以通过mask
设置背景。
我下载了:https://tse2-mm.cn.bing.net/th/id/OIP.D_Gm8IGCvkqmOgtU2hueVwHaHS?pid=Api&rs=1
Code
注意相对路径和绝对路径。
如果使用的相对路径加载文件,执行该py脚本的时候,应该先cd
到该脚本所在目录,然后:
python test-wordcloud.py
test-wordcloud.py
from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS
import matplotlib.pyplot as plt
import scipy.misc as imread
import jieba
# 要分析的文本文件的路径
text_file_paths = "余华-活着.txt"
# 自定义词云背景图片的路径(可不设置)
mask_file_path = "bg.jpg"
# 中文字体路径
font_path = "C:\Windows\WinSxS\amd64_microsoft-windows-font-truetype-simfang_31bf3856ad364e35_10.0.18362.1_none_5a7f93f39ed619f0\simfang.ttf"
# 要生成的结果路径
result_file_path = "result.jpg"
mask_img = plt.imread(mask_file_path)
with open(text_file_paths, "r", encoding="UTF-8") as f:
text = f.read()
wordlist_after_jieba = jieba.cut(text, cut_all=True)
wl_space_split = " ".join(wordlist_after_jieba)
wc = WordCloud(
background_color="white",
font_path=font_path,
# mask=mask_img, # 是否自己指定的背景图片
prefer_horizontal=0.9, # 词语水平展示的比例
width=500,
height=300,
scale=10,
max_words=500,
relative_scaling=0.5,
stopwords=STOPWORDS,
max_font_size=70,
collocations=False,
min_word_length=2,
)
wc.generate(wl_space_split)
# 自定义图片背景形状、颜色
# image_colors = ImageColorGenerator(mask_img)
# wc.recolor(color_func=image_colors)
# 写入到图片文件中
wc.to_file(result_file_path)
# 显示图片
plt.imshow(wc)
plt.axis("off")
plt.show()
结果文件
-
不配置中文字体文件,出现小方块乱码:
-
配置中文字体后:
-
自己指定背景图片后(该图片的宽高会覆盖我们的给词云的
width height
配置):
-
自己指定图片的颜色方案: