在网上有各种各样的一键生成词云的工具,起初我觉得好高大上,但是只有固定的图片模板,使用时有局限。就在想有没有什么方法可以用自定义图片,后来一次机会发现可以用 Python 实现,然后在这里做一个记录。
环境:Python3.5
模块:jieba,wordcloud,PIL,numpy,matplotlib
引入相关模块
1 2 3 4 5 6 7 8
| import jieba
from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image import numpy as np import matplotlib.pyplot as plt
|
分词处理(注:英文文本可以跳过此步骤)
1.准备一段文本,保存为.txt 格式。
2.使用 jieba 分词。
1 2
| fr = open('test.txt','r').read() result = jieba.lcut(fr, cut_all=Ture)
|
3.统计词频
1 2 3 4 5
| word = {} for i in result: if not i in word: word[i] = 1 word[i] += 1
|
制作词云图片
1.准备一张.jpg 图片
2.Wordcloud 中文显示的一点问题处理
下载一个中文字体,例如 simher.ttf
然后 pip3 show wordcloud
查看 wordcloud 模块路径
把下载的字体放到 wordcloud 模块的根目录下
修改wordcloud.py的FONT_PATH
1 2
| FONT_PATH = os.environ.get("FONT_PATH", os.path.join(os.path.dirname(__file__),"simhei.ttf"))
|
3.生成词云的一些准备
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| alice_mask = np.array(Image.open('test.jpg', 'r'))
wc = WordCloud( background_color="white", max_words=10000, max_font_size=100, mask=alice_mask, stopwords={"词云"} )
wc.fit_words(word) ''' 若是英文文本,不需要分词,直接打开一个文本fr传入下面方法即可 wc.generate(fr) # genarete, 文本文件 '''
image_colors = ImageColorGenerator(alice_mask)
|
4.图片显示的样式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| '''随机颜色显示'''
plt.imshow(wc)
plt.title('random color')
plt.axis('off')
'''按图片颜色显示'''
plt.figure() plt.imshow(wc.recolor(color_func=image_colors)) plt.title('image color') plt.axis('off')
'''显示原图''' plt.figure() plt.imshow(alice_mask) plt.title('') plt.axis('off')
plt.show()
|
参考的两篇文档
jieba 分词
Wordcloud 中文翻译