用 Python 这样去创建词云不是更美嘛?

news2024/11/19 13:27:14

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

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

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

我们打开图片看看效果:

图片

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

本文文章由粉丝的分享、推荐,资料干货、资料分享、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:dkl88194,备注:来自CSDN + 加群
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

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

虽然词云生成了,但是风格是固定的,我们可不可以调整呢,显然是可以的。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")

我们看看生成的图片:

图片

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

但这个图片是正方形的,而我们平常见到的词云是有形状的,比如一个圆形、或者一个人的形状等等。显然这是根据图片生成的,而 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")

我们看一下生成的结果:

图片

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

图片

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

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

from wordcloud import WordCloud

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

生成的结果如下:

图片

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

from wordcloud import WordCloud

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

中文正常显示了,但显示的是一整句话。因为 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")

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

图片

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

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

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 中词云生成相关的内容,快来试试吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring的 @ControllerAdvice 之 ResponseBodyAdvice对响应结果进行增强

Spring的 ControllerAdvice 之 ResponseBodyAdvice对响应结果进行增强 1. 使用背景2. 使用方法3. 结果 1. 使用背景 对响应结果进行统一结果处理时,有时会出现有的接口未进行封装,为了解决该问题,可使用ControllerAdvice 注解对响应结果进行…

三辊闸机的应用领域和特点

三辊闸机是一种常用于门禁控制的设备,它具有以下应用和优点: 应用: 门禁控制:三辊闸机可以用于各种场合的门禁控制,如小区、写字楼、学校、医院等。考勤管理:三辊闸机可以与考勤系统集成,用于…

机器学习-K-近邻(KNN)算法

目录 一 . K-近邻算法(KNN)概述 二、KNN算法实现 三、 MATLAB实现 四、 实战 一 . K-近邻算法(KNN)概述 K-近邻算法(KNN)是一种基本的分类算法,它通过计算数据点之间的距离来进行分类。在…

算法通关村第二关-青铜终于学会链表了

大家好我是苏麟 , 今天来学反转链表 . 反转链表 描述 : 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 LeetCode 206.反转链表 : 206. 反转链表 牛客 BM1 反转链表 : 分析 : 本题有两种方法,带头结点和不带头结点&am…

【C语言精髓之指针】结构体指针(->与.两个运算符的区别)

/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 通信与信息专业大二在读 * copyright 2023.10* COPYRIGHT 原创技术笔记:转载需获得博主本人同意,且需标明转载源* language C/C* IDE Base on Mic…

下载安装Microsoft ODBC Driver for SQL Server和配置SQL Server ODBC数据源

1. 下载SQL Server ODBC驱动: Microsoft ODBC Driver for SQL Server - ODBC Driver for SQL Server | Microsoft Learn 2. 安装SQL Server ODBC驱动: 运行安装程序,出现如下图所示页面; 选择下一步;选择我同意许可协…

git学习——第2节 时光机穿梭

我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed version control system. Git is free software. 现在&…

uni——底部弹框显示,底部导航隐藏

案例 在uni-app中,如果你在tabbar页面显示一个底部弹框,底部导航默认是会依旧显示的。如果你想在弹框显示时隐藏底部导航,你可以使用uni.hideTabBar和uni.showTabBar方法来控制底部导航的显示和隐藏。 export default {methods: {openPopup(…

汽车空调工作总结

工作总结 2022年3月加入公司,公司在河南,从事车载空调等相关项目,我的岗位是嵌入式软件工程师,在工作中也遇到了很多机遇和挑战,也学到了非常多的东西,在这里给大家分享下总结经验。 关于工作、公司 毕业…

线上答题活动小程序结合线下大屏复盘总结

线上答题活动小程序结合线下大屏复盘总结 ~ 说来话长,这个活动也接近尾声了,从刚开始着手开发,到现在已过去半年,好不夸张的,当时从4月份开始接触,现在已经十月份了 该小程序我发下主界面截图&#xff0…

ant提供对所有系统属性的访问

ant提供对所有系统属性的访问&#xff0c;就好像这些系统属性已经用 <property>任务定义过一样。 例如&#xff0c;下面的build文件中通过${os.name}获取操作系统名称&#xff0c;通过${java.home}获取Java的安装路径&#xff1a; <project name"demo_project&…

2023年最新版CorelDraw(cdr)软件下载安装教程

CorelDRAW 2023是Corel公司推出的最新版本的图形设计软件。CorelDRAW是一款功能强大的矢量图形编辑工具&#xff0c;被广泛用于图形设计、插图、页面布局、照片编辑和网页设计等领域。 1. 新增的设计工具&#xff1a;CorelDRAW 2023引入了一些全新的设计工具&#xff0c;使用户…

Adobe产品2024

一、软件下载&#xff1a; 二、软件介绍&#xff1a; Adobe公司旗下的产品在影视后期、平面设计等领域有着无可取代的地位。在创意和设计领域中&#xff0c;产品有多达 21 个&#xff0c;包括 Photoshop、Illustrator、InDesign、Premiere Pro、After Effects 和 Acrobat Pro …

LED显示屏系统组成及工作过程

LED显示屏是一种平板显示器&#xff0c;由一个个小的LED模块面板组成&#xff0c;用来显示文字、图像、视频等各种信息的设备&#xff0c;广泛应用于商业传媒、文化演出市场、体育场馆、信息传播、新闻发布、证券交易等不同环境和场景的需要。 LED显示屏系统是基于LED显示屏设备…

【算法训练-回溯算法 零】回溯算法解题框架

抽象地说&#xff0c;解决一个回溯问题&#xff0c;实际上就是遍历一棵决策树的过程&#xff0c;树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍&#xff0c;把叶子节点上的答案都收集起来&#xff0c;就能得到所有的合法答案。站在回溯树的一个节点上&#xff0c;你…

二维码智慧门牌管理系统升级解决方案

文章目录 前言一、返工返修区域的重要性二、作业流程简化与提高效率三、数据准确性的提升四、易维护性与可扩展性 前言 随着城市的发展和人们生活水平的提高&#xff0c;门牌管理系统也在不断升级。最近&#xff0c;二维码智慧门牌管理系统也迎来了升级解决方案。其中&#xf…

【算法|动态规划No.26】leetcode1745. 分割回文串 IV

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

idea git只查看某个人提交的代码记录

git插件只查看某个人提交的代码记录 右键显示弹框&#xff0c;选择Select in Git Log 展示的页面如下&#xff1a; 按住ctrlenter完成查询

操作系统-进程同步、进程互斥(王道视频p26、课本ch6)

这一节&#xff0c;总的来说&#xff0c;就是引出了 “进程同步”的内在含义 &#xff0c;“进程互斥”&#xff08;有限资源访问&#xff09;的解决方案和原则

顺序表第三节(通讯录基础版)

目录 可以先看一遍第二节在看这个 顺序表&#xff08;第二节&#xff09;实现和解析-CSDN博客 1.顺序表的头文件 2.初始化通讯录 3.添加通讯录 特殊&#xff1a;查找对应姓名的通讯录的序号 4.删除通讯录 5.展示通讯录 6.查找通讯录 7.修改通讯录 8.销毁通讯…