python代码,如何利用WordCloud制作一个词云图片?
发布于 作者:苏南大叔 来源:程序如此灵动~本文将要讲述如何制作一个高大上的词云图片,大概的样子就是各种不同颜色不同大小的词条出现在一个不规则边框里面。这个效果看上去非常不错,那么它制作起来方便么?使用现成的python
第三方库wordcloud
,来满足这个需求。
大家好,这里是最近有些小激动的苏南大叔,在这个博客里面讲述计算机代码的故事。本文描述使用wordcloud
来制作图云图片。虽然听起来效果很复杂,但是实际上复杂的部分都被封装到wordcloud
里面了,留下来的只有简单的函数调用了。测试环境:win10
,python@3.6.8
,WordCloud@1.8.2.2
,numpy@1.19.5
,jieba@0.42.1
。
安装第三方库
可能需要如下的几个第三方库,使用pip
进行安装即可。
pip install WordCloud
pip install numpy
pip install jieba
关键的wordcloud
,官方网站来自这里:
更多参数文档:
更多代码例子:
准备内容
这个图片的制作,需要准备下面几个内容:
词云文字列表
word_str = "苏南大叔 今天 很 高兴"
不自己准备的话,也可以使用结巴分词来现成制作一个,反正最终的结果要求就是空格分割。结巴分词的使用文字,请点击:
- https://newsn.net/say/python-jieba.html
- https://newsn.net/say/jieba-lcut.html
- https://newsn.net/say/jieba-cut.html
范例代码如下:
file_text = open("word.txt", "r", encoding = "utf-8").read()
word_str = " ".join(jieba.lcut(file_text))
停用词列表
停用词就是在上面的分词里面,要剔除的词儿。这里对比和结巴分词那边的停用词,概念不同的是:
结巴分词自身没有停用词的概念,停用词是建立在分词结果上的再加工。而wordcloud
里面自带停用词列表,可以使用它自带的停用词列表,也可以自定义这个列表,变量类型可以是<tuple>
(元组一旦被定义就不可以被修改),也可以是<set>
(可修改)。
stopwords = ('的', '也', '及') # <tuple>
或者
from wordcloud import STOPWORDS
STOPWORDS.add("said")
print(STOPWORDS)
print(type(STOPWORDS)) # <set>
这个自带的停用词STOPWORDS
,对于国人来说基本上没用,打印出来都是些英文单词。正常情况下,是不会需要这些英文的停用词的。如果是大段的中文文章,可能会需要专业的停用词列表。可以参考下面的资源:
黑白色调的图片
图案要求就是黑白分明(灰色算黑色范围内),有点颜色其实也可以,但是黑白图是最合适的。可以自己使用photoshop
加工处理一个图片,下面的图是本文中使用的图片mask.png
。
可用的photoshop
快捷键是:
对应的图片要转化成“numpy.ndarray”类型,作为mask
变量存在。
from PIL import Image
import numpy as np
mask = np.array(Image.open('mask.png'))
字体文件
这里需要指定一个系统里面存在的字体文件名,比如微软雅黑字体msyh.ttc
。如果是特殊字体,就需要自行下载准备字体文件了。理论上放置在程序同级目录即可,当然,您也可以写绝对路径更加靠谱点。
如果是公开使用的话,请自行确认下载使用的字体是否存有版权,否则既有可能掉入字体版权陷阱。切记。
测试代码
第零步,导入类库。
import jieba
from wordcloud import WordCloud
from PIL import Image
import numpy as np
第一步,准备词云文字列表,用不用结巴分词看你高兴。
word_str = "苏南大叔 今天 很 高兴 苏南大叔 高兴 苏南大叔 也 非常 高兴"
第二步,准备停用词列表,用不用系统自带的看你高兴。或者不定义也可以,问题不大。
stopwords = ('的', '也', '及')
第三步,定义字体文件,最好不要依赖系统字体。需要注意的是,有些字体不支持显示中文的。
font_path = "贩梦奶酪体.ttf"
第四步,处理黑白分明的图片,想好要被填充词云的位置是黑色(灰色)区域。
mask = np.array(Image.open('mask.png'))
第五步,调用wordcloud
,生成图片。
word_cloud = WordCloud(
background_color = "white",
font_path = font_path,
mask = mask,
stopwords = stopwords
)
word_cloud.generate(word_str)
word_cloud.to_file("word.png")
- 其中
background_color
的设置,是词云图片的背景色(默认是黑色)。 - 原版的
mask.png
的黑色部分,提供词云的轮廓。
其它参数
其它的参数有很多,看名字去猜意思就可以。
max_words = 100 ,
min_font_size = 10 ,
max_font_size = 500 ,
collocations = False , # 与词语重复有关
margin = 2 ,
scale = 5 ,
相关链接
- https://newsn.net/say/python-jieba.html
- https://newsn.net/say/jieba-lcut.html
- https://newsn.net/say/jieba-cut.html
- https://github.com/amueller/word_cloud
- https://amueller.github.io/word_cloud/
- http://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html
- https://amueller.github.io/word_cloud/auto_examples/index.html#example-gallery
总结
这个词云图片的制作和结巴分词还是有些许的联系的,准备好要显示的词儿和要显示的轮廓图片是最重要的,最终的效果非常好。当然,如果您有深度定制的话,请自行修改源码。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。