一、素材准备
- 文本信息:取自《人民日报》一篇关于就业的报道
- 停用词:我选的百度的
- 图片:一张以白色为底的小黄人图片
- 和我同款素材(我上传至百度网盘):
链接:https://pan.baidu.com/s/1ZRXAcXALzmxIRNUFXCGNDg
提取码:8xbn
二、库的准备
- wordcloud (词云制作)
- jieba (中文分词)
- numpy (数组处理)
- matplotlib (基础画图)
- PIL (读取图片)
- collections(统计词频)
三、wordcloud()的参数
四、制作词云
流程如下:
- 读取文本和停用词
- 对文本进行分词处理并进行筛选
- 统计词频
- 提取底片图片颜色(非必要)
- 制作词云
- 显示并保存词云图
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() # 分词和过滤 # 筛选结果为不在停用词范围内且长度大于1的词 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) # 选出频率前10的词 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', # 设置背景颜色 默认是black 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/ 这个在线的词云生成器。我看到需要登陆,这里就不展示效果了。不过还可以展示一下网页默认的试用款(嘻嘻,水一水 )网页虽然比较方便,但不如自己动手做出来的有感觉、有成就感。
如果需要词云来润色文章、报告之类的,赶时间的情况下,还是能省事就省事。