用 Python 创建词云

简介: 用 Python 创建词云

什么是词云?在网络上我们经常可以看到一张图片,上面有一大堆大小不一的文字,这便是词云。词云一般是根据输入的大量词语生成的,如果某个词语出现的次数越多,那么相应的大小就会越大。

Python 中有一个专门用来生成词云的模块:wordcloud,直接 pip 安装即可,然后我们来看看它的用法。

# 导入模块
from wordcloud import WordCloud
# 准备文本数据,是一个字符串,单词之间用空格分隔
sentence = "hello satori hello mashiro hello satori"
# 创建词云对象
wc = WordCloud()
# 根据文本生成词云
wc.generate(sentence)
# 保存为图片
wc.to_file("word.png")

我们打开图片看看效果:

我们看到单词就显示在了图片上,如果单词一多就像天空的云彩一样漂浮着,并且单词出现的频率越高,那么该单词在图片上大小就越大。

虽然词云生成了,但是风格是固定的,我们可不可以调整呢,显然是可以的。WordCloud 里面支持很多参数用来调整风格,我们看一下这些参数。

  • width:词云的宽,默认是400像素;
  • height:词云的高,默认是200像素;
  • background_color:词云的背景颜色,默认是黑色;
  • font_path:生成的词云所使用的字体,传入一个字体名称;
  • mask:词云背景图片,接收一个 Numpy 数组。可以使用 PIL 或者 cv2 读取图片,然后生成数组;
  • stopwords:要屏蔽的词语,接收一个集合,生成词云的时候会忽略掉屏蔽的词语;
  • max_font_size:字体的最大大小,默认为 None;
  • min_font_size:字体的最小大小,默认为 None;
  • max_words:最多显示多少个单词,默认为200。比如文本数据有 10000 个不重复单词,肯定不可能全部显示,而是按照出现的频率高低排序,选择出现频率最高的 N 个单词,默认是 200 个;
  • contour_width:轮廓粗细;
  • contour_color:轮廓颜色;
  • scale:用来控制生成的图片大小,默认为 1。如果我们改成了 10,那么生成的图片大小会扩大 10 倍。这个参数不用管,没太大用,默认为 1 即可;

我们举例说明:

from wordcloud import WordCloud
sentence = "i do not need sex, because life fucks me every every single day"
wc = WordCloud(
    width=500,  # 设置宽度为500px
    height=300,  # 设置高度为300px
    background_color='pink',  # 设置背景为粉色
    stopwords={"sex", "fucks"},  # 设置禁用词
    max_font_size=100,  # 设置最大的字体大小,所有词都不会超过 100px
    min_font_size=10,  # 设置最小的字体大小,所有词都会超过 10px
    max_words=10  # 最多生成 10 个词,当然这里单词比较少,看不出来什么
)
wc.generate(sentence)
wc.to_file("word.png")

我们看看生成的图片:

cd88656e5b1330cd47e611b090800ffb.png

我们看到图片变宽了、变高了,背景变成粉色了,并且也没有出现禁用词。

但这个图片是正方形的,而我们平常见到的词云是有形状的,比如一个圆形、或者一个人的形状等等。显然这是根据图片生成的,而 wordcloud 也支持我们这么做,下面来演示一下。

from wordcloud import WordCloud
from PIL import Image
import numpy as np
# 一篇英文文章
with open("article.txt") as f:
    sentence = f.read()
# 加载一张图片,转化成numpy中的数组
mask = np.array(Image.open("哆啦A梦.png"))
# 传入mask
wc = WordCloud(mask=mask)
wc.generate(sentence)
wc.to_file("word.png")

我们看一下生成的结果:

b3b8ad2949c529fe8c99970b0f4a46ac.png

下面是原始的图片,"多啦A梦.png"

a0f6f007bdadca4c5bb4e111e8111a39.png

会自动将周围的白色区域给忽略掉,因此选择的图片建议最好是白底的。

然后目前生成词云所使用的单词都是英文的,那中文可不可以呢?我们来看一下。

from wordcloud import WordCloud
wc = WordCloud()
wc.generate("古明地觉的编程教室")
wc.to_file("word.png")

生成的结果如下:

e243591167e2f6b00e91bc32722bb1c3.jpg

显然默认是不支持中文的,此时我们需要指定一个中文字体。

from wordcloud import WordCloud
# 传入本机支持中文的字体名称
wc = WordCloud(font_path="Arial Unicode.ttf")
wc.generate("古明地觉的编程教室")
wc.to_file("word.png")

看看效果:

a89d8eaf19595783edfa92a1970bed98.jpg

中文正常显示了,但显示的是一整句话。因为 wordcloud 默认是以空格分隔单词的,所以对于英文我们不需要做什么处理,因为英文单词之间就是以空格分隔的。但中文则是所有的汉字都连在一起,因此整体被当成了一个词。

这个时候推荐使用 jieba 分词,将单词进行分隔。

from wordcloud import WordCloud
import jieba
with open("出师表.txt") as f:
    sentence = f.read()
# 分词得到列表,手动使用空格拼接
sentence = " ".join(jieba.cut(sentence))
wc = WordCloud(font_path="Arial Unicode.ttf")
wc.generate(sentence)
wc.to_file("word.png")

我们基于出师表的内容生成词云:

a76e90909e9f222a095391252fa652b1.jpg

结果没有问题,当然这里图片有点小了,你也可以调整它的宽高。

另外我们一直都是将词云保存成图片,除了图片,还可以保存成其它格式。

from io import BytesIO
from wordcloud import WordCloud
import jieba
with open("出师表.txt") as f:
    sentence = f.read()
sentence = " ".join(jieba.cut(sentence))
wc = WordCloud(font_path="Arial Unicode.ttf")
wc.generate(sentence)
# 将词云保存为 PIL 的 Image 对象
im = wc.to_image()
buf = BytesIO()
# 将词云的字节流保存在 buf 中,这样可以直接交给客户端进行渲染
im.save(buf, "png")
print(buf.getvalue())
# 当然也可以保存为文件,im.save(filename)
# wc.to_file() 底层也是先转成 Image 对象、然后调用 im.save() 实现的
# 或者还可以保存为 SVG 格式
svg = wc.to_svg()
# 将 svg 的内容保存成文件,就得到 SVG 图片了
print(svg)

以上就是 Python 中词云生成相关的内容,快来试试吧。

相关文章
|
8月前
|
机器学习/深度学习 自然语言处理 数据可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化
|
3月前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
python知识点100篇系列(23)- 使用stylecloud生成词云
|
5月前
|
自然语言处理 搜索推荐 数据可视化
如何使用python实现一个优雅的词云?(超详细)
如何使用python实现一个优雅的词云?(超详细)
129 2
|
5月前
|
自然语言处理 数据可视化 Python
【Python】Python人民的名义-词云-关系图可视化(源码+报告)【独一无二】
【Python】Python人民的名义-词云-关系图可视化(源码+报告)【独一无二】
|
6月前
|
自然语言处理 数据可视化 机器人
如何画一个词云 | python小知识
词云,又称文字云,是文本数据的视觉表示,通过将网络文本或大量文本数据中出现频率较高的“关键词”以不同大小的字体、颜色或形状进行可视化展示,形成类似云的彩色图形。这种视觉上的突出使得浏览者能够一眼扫过文本就领略到文本的主旨,是数据可视化的一种重要形式 【7月更文挑战第6天】
69 0
|
7月前
|
搜索推荐 Python Windows
python中对于wordcloud词云生成报错提示的解决
通过搜索印象错误信息:ValueError:Only supported for TrueType fonts,几乎大部分人给出的选项都是让你指定TrueType fonts路径,或者新下载TTF字体,并重新指定,但是这两种解决方案并无法解决报错。 在真正解决问题之前,先来介绍几个与之相关的知识点,对于有经验的人,这样的知识点完全是“小菜”,但是对于初学者,这种知识点就是因为缺少相关实践而无从下手,无从搜索引擎。
|
7月前
|
数据采集 自然语言处理 数据可视化
拿来及用的Python词云图代码 | wordcloud生成词云详解
词云也叫文字云,是一种可视化的结果呈现,常用在爬虫数据分析中,原理就是统计文本中高频出现的词,过滤掉某些干扰词,将结果生成一张图片,直观的获取数据的重点信息。今天,我们就来学习一下Python生成词云的常用库wordcloud。
|
7月前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云(Word Cloud),又称为文字云或标签云,是一种用于文本数据可视化的技术,通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中,更频繁出现的单词会显示得更大,反之则更小。
|
7月前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云是文本数据可视化的工具,显示单词频率,直观、美观,适用于快速展示文本关键信息。 - 用途包括关键词展示、数据探索、报告演示、情感分析和教育。 - 使用`wordcloud`和`matplotlib`库生成词云,`wordcloud`负责生成,`matplotlib`负责显示。 - 示例代码展示了从简单词云到基于蒙版、颜色和关键词权重的复杂词云生成。 - 案例覆盖了中文分词(使用`jieba`库)、自定义颜色和关键词权重的词云。 - 代码示例包括读取文本、分词、设置词云参数、显示和保存图像。
560 1
|
7月前
|
自然语言处理 监控 数据可视化
艺术与文本的交织:基于Python的jieba和wordcloud库实现华丽词云
艺术与文本的交织:基于Python的jieba和wordcloud库实现华丽词云
103 0