用Python做一个令人发疯的海报
Python可以做海报?
Python真的可以做海报吗?
Python做海报,你确定不是在逗我?
重要的问题问了三遍,答案是真的可以!
今天我们就来用Python的一个比较好玩的模块来进行创作----词云(wordcloud)。
词云这个模块很好玩,特可以把句子词云做成图像效果,而且很有感觉,大家可以先预览一下:
这些便是词云(wordcloud)做出来的。
那对于词云这个模块,我们怎么去使用呢?
首先第一步,安装词云模块:
pip install wordcloud
安装的时候记得要装一下它的依赖
链接:https://pan.baidu.com/s/1VyUb460-TCiVaHjrDGVBwg 密码:6kv1
依赖也可以使用pip安装,直接pip install 依赖所在的路径即可。
下面一个还要安装的是scipy模块,SciPy是为数学,科学和工程服务的开源软件; 这里对于词语排放就会用到它。
pip install scipy
最后一个模块是做图像展示的:matplotlib
pip install matplotlib
安装完毕之后我们就可以来使用词云模块了:
首先将需要用到的每个模块都导入进来:
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
import matplotlib.pyplot as plt
from scipy.misc import imread
导入之后做的第一件事是读取词汇文本,需要使用open方法打开一个TXT文件:
text = open('words.txt','r',encoding='utf-8').read()
之后我们需要使用导入背景图片了,背景图片决定我们最终图片显示的形状,这时候就需要用到scipy模块里面的inread方法了:
pic = imread('axa.jpg')
之后我们便可以使用wordcloud模块的WordCloud方法进行生成词云了:
wc = WordCloud( font_path='./font/llqq.ttf',#设置字体
background_color="black", #背景颜色
max_words=2000,# 词云显示的最大词数
mask=back_coloring,#设置背景图片
#max_font_size=100, #字体最大值
# width=4000,
# height=2000,
random_state=42,
# color_func = random_color_func,
).generate(text)
# 生成词云
wordcloud方法里面的参数有很多,现在来一一介绍:
font_path : string //字体路径,需要展现什么字体就把该字体路径+后缀名写上,如:font_path = '黑体.ttf'
width : int (default=400) //输出的画布宽度,默认为400像素
height : int (default=200) //输出的画布高度,默认为200像素
prefer_horizontal : float (default=0.90) //词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )
mask : nd-array or None (default=None) //如果参数为空,则使用二维遮罩绘制词云。如果 mask 非空,设置的宽高值将被忽略,遮罩形状被 mask 取代。除全白(#FFFFFF)的部分将不会绘制,其余部分会用于绘制词云。如:bg_pic = imread('读取一张图片.png'),背景图片的画布一定要设置为白色(#FFFFFF),然后显示的形状为不是白色的其他颜色。可以用ps工具将自己要显示的形状复制到一个纯白色的画布上再保存,就ok了。
scale : float (default=1) //按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。
min_font_size : int (default=4) //显示的最小的字体大小
font_step : int (default=1) //字体步长,如果步长大于1,会加快运算但是可能导致结果出现较大的误差。
max_words : number (default=200) //要显示的词的最大个数
stopwords : set of strings or None //设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS
background_color : color value (default=”black”) //背景颜色,如background_color='white',背景颜色为白色。
max_font_size : int or None (default=None) //显示的最大的字体大小
mode : string (default=”RGB”) //当参数为“RGBA”并且background_color不为空时,背景为透明。
relative_scaling : float (default=.5) //词频和字体大小的关联性
color_func : callable, default=None //生成新颜色的函数,如果为空,则使用 self.color_func
regexp : string or None (optional) //使用正则表达式分隔输入的文本
collocations : bool, default=True //是否包括两个词的搭配
colormap : string or matplotlib colormap, default=”viridis” //给每个单词随机分配颜色,若指定color_func,则忽略该方法。
fit_words(frequencies) //根据词频生成词云
generate(text) //根据文本生成词云
generate_from_frequencies(frequencies[, ...]) //根据词频生成词云
generate_from_text(text) //根据文本生成词云
process_text(text) //将长文本分词并去除屏蔽词(此处指英语,中文分词还是
需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )
recolor([random_state, color_func, colormap]) //对现有输出重新着色。重新上色会比重新生成整个词云快很多。
to_array() //转化为 numpy array
to_file(filename) //输出到文件
到这里我们整个图片已经生成好了。下面我们只需要用pyplot方法将它展示出来就ok了。
运行程序就可以打印结果了。
打印结果就如我们一开始所展示的。
如果想把图片保存下来,可以使用上面提到过的to_file(filename) 方法:
对于如果需要使用中文分词,我们可以使用jieba模块来分词:
pip install jieba
seg_generator = jieba.cut(text) # 使用结巴分词
seg_list = [i for i in seg_generator if i not in stopwords]
seg_list = [i for i in seg_list if i != u' ']
seg_list = r' '.join(seg_list)
最后把我们的代码总结的更精炼一点:
这样使用词云做海报的代码结完成啦!
听说有气质的人都会关注这个公众号!
文章来源: blog.csdn.net,作者:敲代码的灰太狼,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/tongtongjing1765/article/details/100581716
- 点赞
- 收藏
- 关注作者
评论(0)