一、素材准备
二、库的准备
- wordcloud (词云制作)
- jieba (中文分词)
- numpy (数组处理)
- matplotlib (基础画图)
- PIL (读取图片)
- collections(统计词频)
三、wordcloud()的参数
参数 | 描述 |
---|
width | 指定词云对象生成图片的宽度,默认400像素 | height | 指定词云对象生成图片的高度,默认200像素 | min_font_size | 指定词云中字体的最小字号,默认4号 | max_font_size | 指定词云中字体的最大字号,根据高度自动调节 | font_step | 指定词云中字体字号的步进间隔,默认为1 | font_path | 指定字体文件的路径,默认为None | max_words | 指定词云显示的最大单词数量,默认200 | stop_words | 指定词云的排除词列表,即不显示的单词列表 | mask | 指定词云形状,默认为长方形,需要引用imread()函数 | background_color | 指定词云图片的背景颜色,默认为黑色 |
四、制作词云
流程如下:
- 读取文本和停用词
- 对文本进行分词处理并进行筛选
- 统计词频
- 提取底片图片颜色(非必要)
- 制作词云
- 显示并保存词云图
import jieba
import collections
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
test_text = 'D:/Pycharm/wordcloud/texts/job.txt'
test_stop = 'D:/Pycharm/wordcloud/stopwords/baidu_stopwords.txt'
test_mask = 'D:/Pycharm/wordcloud/pictures/1.png'
test_font = 'D:/Pycharm/wordcloud/SourceHanSerifK-Light.otf'
text = open(test_text, encoding='utf8').read()
STOPWORDS_BAIDU = open(test_stop, encoding='utf8').read().split()
word_list = []
for word in jieba.cut(text):
if word not in set(STOPWORDS_BAIDU) and len(word) > 1:
word_list.append(word)
word_counts = collections.Counter(word_list)
word_counts_top100 = word_counts.most_common(10)
im_mask = np.array(Image.open(test_mask))
im_colors = ImageColorGenerator(im_mask)
my_cloud = WordCloud(
background_color='white',
mask=im_mask,
width=900, height=600,
max_words=100,
font_path=test_font,
max_font_size=30,
min_font_size=5,
random_state=50
).generate_from_frequencies(word_counts)
my_cloud.recolor(color_func=im_colors)
ax = plt.imshow(my_cloud)
plt.axis('off')
plt.show()
ax.figure.savefig('D:/词云.png', bbox_inches='tight', dpi=150)
五、结果展示及原图对比
- 原图:
- 词云图:
六、在线网页实现
在线的网页有很多,但一般都需要登陆使用,如:https://www.yciyun.com/ 这个在线的词云生成器。我看到需要登陆,这里就不展示效果了。不过还可以展示一下网页默认的试用款(嘻嘻,水一水 ) 网页虽然比较方便,但不如自己动手做出来的有感觉、有成就感。
如果需要词云来润色文章、报告之类的,赶时间的情况下,还是能省事就省事。
七、推荐阅读
|