利用wordcloudjieba做一个词云

环境

使用到的轮子:matplotlibjiebascipywordcloudnumpyPIL
python2jieba的中文分词支持不是很好,所以使用python3

1
2
3
4
5
6
7
python 3.6.1
jieba 0.39
matplotlib 1.0.4
scipy 1.0.0
wordcloud 1.3.1
numpy 1.13.3
PIL 1.1.6

  • Github源代码

    具体实现

    导入轮子

    1
    2
    3
    4
    5
    6
    7
    #encoding=utf-8
    import jieba
    import matplotlib.pyplot as plt
    from scipy.misc import imread
    from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
    import numpy as np
    from PIL import Image

所用到的库都能用pip3安装。

生成分词

1
2
3
text_from_file=open('data.txt','r').read()
Word_spilt_jieba = jieba.cut(text_from_file,cut_all = False)
word_space = ' '.join(Word_spilt_jieba)

数据是从网上复制了几份十九大,国庆,小说的内容,从文本中读入数据到text,用jieba进行分词,不使用全模式,全模式匹配会出现重复关键词的现象,使用后效果并不好。

自定义词云背景

1
2
img=imread('bipt.jpg')
img = np.array(Image.open('bipt.jpg'))

设置生成词云的背景,这里用到了numpy将图片转换为矩阵,图片需要自己下载定义背景。

生成词云

1
2
3
4
5
6
7
8
9
10
my_wordcloud = WordCloud(
background_color='white', #设置背景颜色
mask=img, #背景图片
max_words = 200, #设置最大显示的词数
stopwords = STOPWORDS, #设置停用词
#设置字体格式,字体格式 .ttf文件需自己网上下载,最好将名字改为英文,中文名路径加载会出现问题。
font_path = 'simkai.ttf',
max_font_size = 100, #设置字体最大值
random_state=50, #设置随机生成状态,即多少种配色方案
).generate(word_space)

设置wordcloud参数,注意这里有一个字体必须自己设置中文字体,否则生成的词云不能出现中文,我用到的是simkai.ttf,下载地址:simkai字体

显示词云

1
2
3
4
5
iamge_colors = ImageColorGenerator(img)
plt.imshow(my_wordcloud)
plt.axis('off')
plt.show()
my_wordcloud.to_file('res.jpg')

取图片的颜色作为词云的颜色,并显示词云。如下图