通天战队|高大上的词云,其实很简单( 二 )


mask参数如果为空 , 以默认宽和高绘制 。 如果mask非空 , 设置的宽高值将被忽略 , 遮罩形状被具体的mask取代 。 除全白(#FFFFFF)的部分将不会绘制 , 其余部分会用于绘制词云 。 比如用Pillow读取某张图片 , 转换成Numpy的array格式 , 并将其设置为mask(遮罩) 。 除图片全白的部分将不会被绘制 , 其余部分会用于绘制词云 。
scale指按照比例进行放大画布 , 默认为1 。 如设置为1.5 , 则长和宽都是原来画布的1.5倍 。
min_font_size指显示的最小的字体大小 , 默认为4 。 max_font_size指显示的最大的字体大小 。
max_words指要显示的词的最大个数 , 默认为200 。
stopwords指需要停用的词 , 如果为空 , 则使用内置的STOPWORDS停用库 。
background_color指背景颜色 , 默认为黑色(black) 。 如background_color='white',背景颜色为白色 。
【通天战队|高大上的词云,其实很简单】mode参数默认为RGB , 当参数为RGBA并且background_color不为空时 , 背景为透明 。
color_func指生成新颜色的函数 , 如果为空 , 则使用 self.color_func
wordcloud库如何将文本转化为词云呢?
(1)分隔 , 以空格分隔单词 , 如果是中文 , 使用jieba分词库切割 。
(2)统计 , 单词出现次数并过滤
(3)字体 , 根据统计配置字号
(4)布局 , 颜色环境尺寸
接下来我们一起进行代码编写 , 通过3步来演示词云效果 。
(1)准备分词文件和背景图片 。
我们在网上找一些关于爱情美好的语句 , 黏贴到文本文件 , 命名为7xi.txt 。 然后找一个好的背景 , 比如心型图案 , 要求背景白色或者透明 , 格式为png 。
(2)词云效果 。
通过下段代码实现一个词云效果 。
from wordcloud import WordCloud, STOPWORDS,ImageColorGenerator
import jieba
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import os
curpath = os.path.dirname(__file__)
filename = os.path.join(curpath, '7xi.txt')
backimg = os.path.join(curpath, 'back3.png')
savefilename = os.path.join(curpath, 'wordcloud.png')
#设置模板
backgroud_Image=np.array(Image.open(backimg))
#创建对象
wcd = WordCloud(background_color='white',width=400,height=200,font_path='simhei.ttf',mask=backgroud_Image,max_font_size=100, min_font_size=10,scale=1.5)
text=open(filename,'r',encoding='utf-8').read()
#对读取的文件进行分词
text=" ".join(jieba.lcut(text))
#生成词云
wcd.generate(text)
#保存图片
wcd.to_file(savefilename)
代码执行后生成wordcloud.png , 文件内容如图所示 。
通天战队|高大上的词云,其实很简单
通天战队|高大上的词云,其实很简单(3)美化效果 。
默认词云的颜色以蓝绿冷色调偏多 , 看起来不是很舒服 。 我们换个颜色来显示 , 如下列代码 。
image_colors = ImageColorGenerator(backgroud_Image)
wcd.recolor(color_func=image_colors)
#保存图片
wcd.to_file(savefilename)
代码执行后 , 文件内容如图所示 。
除此之外 , 还可以显示在Matplotlib的窗口中 , 只需要增加如下代码即可 。
plt.imshow(wcd)
plt.axis('off') #关闭坐标轴