词云,就是将文本以图片的形式表示出来,可以给人视觉上的冲击。下面,简单谈词云的制作
制作词云最基本的就是需要文本了吧。而最简单的文本就是一个字符串。我们就拿它开始举个例子。
首先,词云的制作依赖于wordcloud库,pip之后就可以使用了。
最简单的四行代码:
import wordcloud
w = wordcloud.WordCloud()
w.generate('I love China')
w.to_file('1.png')
代码很简单:第一行导入库;第二行得到一个对象,每一个wordcloud对象都对应了一张词云图;第三行就用文本生成了词云;第四行保存文件。
当然,这种方式也不一定必须用英文,中文也是可以的。
但是,文本太长怎么办呢?总不能在py文件里面写个老长老长的字符串吧。理想方法就是放到文本文件里面吧。
import wordcloud
f = open('乡村振兴.txt', encoding='utf-8')
txt = f.read()
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
font_path='msyh.ttc')
w.generate(txt)
w.to_file('乡村振兴.png')
f.close()
上面的代码,也很简单。WordCloud方法里面多了几个参数,下面具体说说。width、height都很好说,看名字就知道了。background_color就是背景色,一里面没有指定默认为黑色,现在我们将其设置为白色底,font_path指明用什么样的字体风格,这里用的是电脑上都有的微软雅黑。其他的文字风格在网上也都能下载。
效果:
上面可以看到词云都是句子,想要词语怎么办?这里就要用到一个重要的库——jieba
库。
import jieba
import wordcloud
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
font_path='msyh.ttc')
f = open('乡村振兴.txt', encoding='utf-8')
txt = f.read()
txt_list = jieba.lcut(txt)
string = "".join(txt_list)
w.generate(string)
w.to_file('乡村振兴2.png')
f.close()
终点就是jiebe.lcut()函数,它能将中文的一句话,分成词语。当然jieba库也有很多其他的处理分词的函数,这里不再赘述。有兴趣的可以自行百度。分词后得到一个列表,在拼接成字符串(字符串的join函数)就可以用之前的方法生成了。
上面都是文字铺满了整张图片,下面做点更有意义的事。
利用图片做成指定形状的词云。
import jieba
import wordcloud
import imageio
mk = imageio.imread('love.jpg')
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
mask=mk,
font_path='benmoyouyuan.ttf')
f = open('乡村振兴.txt', encoding='utf-8')
txt = f.read()
txt_list = jieba.lcut(txt)
string = "".join(txt_list)
w.generate(string)
w.to_file('乡村振兴3.png')
f.close()
这里用到了imageio库,用来读取图片,当然也不一定非要用这个库,比如PIL、Opencv也都能处理。读入后在Wordcloud函数里面加入参数mask当个“面具”就可以了。注意面具图片的其他部分必须是白色的,否则可能达不到预期效果。
(左侧是原图,右侧是得到的词云图)
当然,词云还有很多更多的效果,有兴趣的读者可以自行百度。这里再简单介绍几个:
在wordcloud函数中加入stopwords参数,其值为一个禁用词列表
同样在wordcloud函数。
contour_width指定轮廓线宽度,比如contour_width=1
contour_color指定轮廓线颜色,比如contour_color='red'
import jieba
import wordcloud
import imageio
mk = imageio.imread('爱丽丝.jpg')
w = wordcloud.WordCloud(width=1000,
height=700,
background_color='white',
mask=mk,
font_path='benmoyouyuan.ttf', )
f = open('乡村振兴.txt', encoding='utf-8')
txt = f.read()
f.close()
txt_list = jieba.lcut(txt)
string = "".join(txt_list)
w.generate(string)
image_color = wordcloud.ImageColorGenerator(mk)
wc_color = w.recolor(color_func=image_color)
wc_color.to_file('e10.png')
思想就是在原来词云的基础上,再建立一个Wordcloud对象。这个对象就是我们最后想要的。它的生成不是像之前的generate函数,而是对原来的对象进行重新绘色。
当然,词云还有好多知识,博主就不再说了(主要也不会)。python词云也是很有趣的,像博主就用同学的证件照做了专属他们的词云(希望不要打我)。