千呼万唤始出来,人见人爱花见花开的我又来了。
几星期没来发帖,鬼知道楼主到底经理了什么,路过的时候果然还是想留下来些什么,碰巧今天做了一个小应用就拿来给大家分享下!今天的主题是:词云。
“词云”这个概念简单来讲就是集统计与视觉于一体的饕餮盛宴,文章中不同频度的关键字突出渲染,并过滤掉大量冗余的文本,从而使阅读者只要一眼扫过就可以领略文章的主旨。
看到这个,按照之前讲到的编程思维,首先心里要定义出几个关键点:
1.如何将文章中的关键词拆分出来。
2.如何统计每个关键词出现的频率。
3.如何将高频关键字按自己喜欢的颜色展示。
4.如何将文本显示在固定的背景轮廓中。
5.……
讲到词云,Python中已经有功能较为完善的工具包WordCloud,可以直接通过Pip安装。它基本上可以满足我们所有的需求,简单的几行代码就可以实现我的药的效果。
#首先我准备了一个文本库,直接从官网上粘出来的
Demo.txt
#coding=utf-8
#导入词云的包
fromwordcloudimport(WordCloud, get_single_color_func)
#导入matplotlib作图的包
importmatplotlib.pyplotasplt
fromscipy.miscimportimread
#导入结巴
importjieba
#读取文件,返回一个字符串,使用utf-8编码方式读取,该文档位于此python同以及目录下
f =open('word.txt').read()
cut_text =" ".join(jieba.cut(f))
printcut_text
color_mask = imread("demo2.png")
#生成一个词云对象
wordcloud = WordCloud(
font_path="msyh.ttf",#设置字体,防止2X版本解析乱码
background_color="white",#设置背景为白色,默认为黑色
mode='RGBA',#当参数为“RGBA”并且background_color不为空时,背景为透明
mask=color_mask,#添加背景
width=1500,#设置图片的宽度
height=960,#设置图片的高度
color_func=get_single_color_func('#77DDFF'),#设置主颜色渐变
margin=10#设置图片的边缘
).generate(cut_text)
# 绘制图片
plt.imshow(wordcloud)
# 消除坐标轴
plt.axis("off")
# 展示图片
plt.show()
# 保存图片
wordcloud.to_file('wordcloud.png')
出来的结果:
是不是很简单?
小结:
使用wordcloud的时候,如果文本是中文的话,需要增加utf-8的编码;
如果是中文的话,只是读文件是不够的,必须用结巴分词后再传到wc中,否则将显示乱码;
还是中文的问题,如果不指定font_path的话将依然会显示乱码,甚至报错,因为wordcloud.py的default编码是英文的;
默认背景颜色是黑色,如果想做透明的背景图片只需要增加rgba的mode模式即可,此外背景参数不可为空;
如果不指定get_single_color_func,将会随机颜色显示;
领取专属 10元无门槛券
私享最新 技术干货