安装python环境
pip install numpy matplotlib pillow wordcloud imageio jieba snownlp itchat
有些库以及安装过了
制作词云
一个简单的例子
# 导入词云制作第三方库
import wordcloud
# 创建词云对象
word = wordcloud.WordCloud()
# 传入文本
word.generate('and that government of the people, by the people, for the people, shall not perish from the earth.')
# 保存图片
word.to_file('output.png')
运行效果:
可以看到词云绘制出来的词的大小和出现的频率有关,并且去掉了一些没用的词。
设置词云属性
import wordcloud
# 设置词云图片宽、高、字体、背景颜色等参数
word = wordcloud.WordCloud(width=1000,height=700,background_color='white',font_path='msyh.ttc')
word.generate('从明天起,做一个幸福的人。喂马、劈柴,周游世界。从明天起,关心粮食和蔬菜。我有一所房子,面朝大海,春暖花开')
word.to_file('output.png')
运行效果:
绘制词云的时候单词大小有一定的随机性。
常用参数:
- width 词云图片宽度,默认400像素
- height 词云图片高度 默认200像素
- background_color 词云图片的背景颜色,默认为黑色
- font_step 字号增大的步进间隔 默认1号
font_path 指定字体路径 默认None,对于中文可用font_path='msyh.ttc'
- mini_font_size 最小字号 默认4号
- max_font_size 最大字号 根据高度自动调节
- max_words 最大词数 默认200
- stop_words 不显示的单词
stop_words={"python","java"}
- Scale 默认值1。值越大,图像密度越大越清晰
- prefer_horizontal:默认值0.90,浮点数类型。表示在水平如果不合适,就旋转为垂直方向,水平放置的词数占0.9?
- relative_scaling:默认值0.5,浮点型。设定按词频倒序排列,上一个词相对下一位词的大小倍数。有如下取值:“0”表示大小标准只参考频率排名,“1”如果词频是2倍,大小也是2倍
- mask 指定词云形状图片,默认为矩形
通过外部文件导入文本
import wordcloud
# 从外部.txt文件中读取大段文本,存入变量txt中
file = open('关于实施乡村振兴战略的意见.txt',encoding='utf-8')
txt = file.read()
word = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc')
word.generate(txt)
word.to_file('output.png')
运行效果:
增加中文分词
import jieba
import wordcloud
word = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc')
file = open('关于实施乡村振兴战略的意见.txt',encoding='utf-8')
txt = file.read()
# 对文本进行中文分词,得到string
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)
word.generate(string)
word.to_file('output.png')
运行效果:
显示的内容以及从句子变成了单词。
中文分词库jieba
的常用方法:
精确模式(最常用,只会这个就行)
:每个字只用一遍,不存在冗余词汇。jieba.lcut('动力学和电磁学')
全模式
:把每个字可能形成的词汇都提取出来,存在冗余。jieba.lcut('动力学和电磁学',cut_all=True)
搜索引擎模式
:将全模式分词的结果从短到长排列好。jieba.lcut_for_search('动力学和电磁学')
改变词云形状
import jieba
import wordcloud
# 导入imageio库中的imread函数,并用这个函数读取本地图片,作为词云形状图片
import imageio
mk = imageio.imread("wujiaoxing.png")
# 注意要加scale参数,提高清晰度
# 设置mask参数,改变形状
word = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', mask=mk, scale=15)
file = open('关于实施乡村振兴战略的意见.txt',encoding='utf-8')
txt = file.read()
txtlist = jieba.lcut(txt)
string = " ".join(txtlist)
word.generate(string)
word.to_file('output.png')
模板图片:
运行效果:
这图片一定要是白底的。
勾勒出形状的轮廓线
import wordcloud
string = open('hamlet.txt').read()
import imageio
mk = imageio.imread("alice.png")
# 增加参数contour_width和contour_color设置轮廓宽度和颜色
word = wordcloud.WordCloud(background_color="white", mask=mk, contour_width=1, contour_color='steelblue')
word.generate(string)
word.to_file('output.png')
模板图片:
运行效果:
据说不能用做的太清晰,不然不好看。
按照模板图片的颜色绘制词云
# 导入ImageColorGenerator提取图片颜色
from wordcloud import WordCloud,ImageColorGenerator
text = open('alice.txt').read()
import imageio
mk = imageio.imread("alice_color.png")
word = WordCloud(background_color="white", mask=mk,)
word.generate(text)
# 调用wordcloud库中的ImageColorGenerator()函数,提取模板图片各部分的颜色
image_colors = ImageColorGenerator(mk)
# 给词云对象按模板图片的颜色重新上色
word_color = word.recolor(color_func=image_colors)
word_color.to_file('output.png')
模板图片:
运行效果: