python wordcloud详解_wordcloud详解

论坛 期权论坛 脚本     
已经匿名di用户   2022-4-13 16:44   2658   0

word_cloud是python的一个三方库,称为词云也叫做文字云,是根据文本中的词频,对内容进行可视化的汇总.

下载与安装

安装word_cloud可以使用 python 自带的 pip 工具来进行

首先确保已经安装python与pip并且pip以及更新到最新版本.

这里使用的python版本为3.7,pip版本为19.2.1

word_cloud依赖于numpy与pillow,当然如果只想将图像保存成图片文件,

使用matplotlib库代替也可以,此处索性就将三个库都安装好.

pip install numpy

pip install pillow

pip install matplotlib

安装完成后,再安装word_cloud

pip install wordcloud

如果安装失败,可以去github主页下载zip包

根据文本绘制

word_cloud的使用非常简单,一下的demo展示了如何从字符串中生成词频图并保存的

# -*- coding: utf-8 -*-

from wordcloud import WordCloud

text = "dog cat fish bird cat cat dog"

wc = WordCloud()

wc.generate(text)

wc.to_file("1.png")

word_cloud从给定的text中按空格读取单词,出现次数越多的单词,在生成的图像越大,效果图如下

默认效果.png

控制绘制参数

上面的例子比较粗糙,为了更精细化的控制,word_cloud提供了大量参数用来控制图像的生

属性名

示例

说明

background_color

background_color='white'

指定背景色,可以使用16进制颜色

width

width=600

图像长度默认400 单位像素

height

height=400

图像高度 默认200

margin

margin=20

词与词之间的边距 默认2

scale

scale=0.5

缩放比例 对图像整体进行缩放 默认为1

prefer_horizontal

prefer_horizontal=0.9

词在水平方向上出现的频率,默认为0.9

min_font_size

min_font_size=10

最小字体 默认为4

max_font_size

max_font_size=20

最大字体 默认为200

font_step

font_step=2

字体步幅 控制在给定text遍历单词的步幅 默认为1 一般不用修改 对于较大text 增大font_step会加快读取速度 但会牺牲部分准确性

stopwords

stopwords=set('dog')

设置要过滤的词 以字符串或者集合作为接收参数 如不设置将使用默认的 停动词词库

mode

mode='RGB'

设置显色模式 默认RGB 如果为RGBA且background_color不为空时,背景为透明

relative_scaling

relative_scaling=1

词频与字体大小关联性 默认为5 值越小 变化越明显

color_func

color_func=None

生成新颜色的函数 如果为空 则使用 self.color_func

regexp

regexp=None

默认单词是以空格分割,如果设置这个参数 将根据指定函数来分割

width

regexp=None

默认400 单位像素

collocations

collocations=False

是否包含两个词的搭配 默认为True

colormap

colormap=None

给所有单词随机分配颜色 指定color_func则忽略

random_state

random_state=1

为每个单词返回一个PIL颜色

font_path

font_path='PangMenZhengDaoBiaoTiTi-1.ttf'

指定字体

mask

mask=None

指定背景图,会将单词填充在背景图像素非白色(#FFFFFF RGB(255,255,255))的地方

利用属性设置一下图像,效果如下

from wordcloud import WordCloud

text = "dog cat fish bird cat cat dog"

wc = WordCloud(

background_color='white',

width=600,

)

wc.generate(text)

wc.to_file("1.png")

简单设置一下背景和长度.png

中文乱码问题解决

在使用word_cloud处理中文时,会出现乱码,如下

from wordcloud import WordCloud

text = "张三 李四 王五"

wc = WordCloud(

background_color='white',

width=600,

)

wc.generate(text)

wc.to_file("1.png")

默认字体中文乱码.png

这是由于word_cloud自带的字体DroidSansMono.ttf不支持中文

解决方法为使用支持中午跟的字体替代(注意版权),下面例子使用旁门正道字体

from wordcloud import WordCloud

text = "张三 李四 王五"

wc = WordCloud(

background_color='white',

font_path="PangMenZhengDaoBiaoTiTi-1.ttf"

)

wc.generate(text)

wc.to_file("1.png")

指定字体后.png

在指定背景图上生成

使用numpy与matplotlib库,可以在指定背景图上生成词云

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

from PIL import Image

from wordcloud import WordCloud, ImageColorGenerator

text = "dog cat fish bird lino tiger monkey rabbit koala panda snake"

# 加载背景图

color_mask = np.array(Image.open("f.jpeg"))

wc = WordCloud(

mask=color_mask,background_color='white'

)

wc.generate(text)

image_colors = ImageColorGenerator(color_mask)

# 在只设置mask的情况下 会得到一个拥有图片形状的词云 axis默认为on 会开启边框

plt.imshow(wc, interpolation="bilinear")

plt.axis("off")

plt.savefig("a.jpg")

# 直接在构造函数中直接给颜色 这种方式词云将会按照给定的图片颜色布局生成字体颜色策略

plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")

plt.axis("off")

plt.savefig("b.jpg")

原始图

原始图

按轮廓生成.jpg

按轮廓按颜色生成.jpg

给定的词数比较少,导致效果不是太明显,增加一下text内容即可

numpy与matplotlib的用法此处不做具体讲解,仅最简单使用

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP