Python开源工具库使用之词云Wordcloud

文章目录

  • 前言
  • 一、基本使用
    • 1.1 文本生成词云
    • 1.2 配置项
  • 二、进阶用法
    • 2.1 自定义形状
    • 2.2 自定义着色
    • 2.3 自定义词频
    • 2.4 中文
  • 三、实际案例
    • 3.1 工作报告词云
    • 3.2 周杰伦歌词词云
  • 四、总结
    • 4.1 优点和局限性
    • 4.2 展望未来发展
  • 参考

前言

当我们需要将大量文本数据可视化展示时,WordCloud 库是一个非常有用的工具。它能够将文本中的关键词以词云的形式呈现出来,使得人们可以直观地了解文本的主题和关键词。WordCloud 库不仅能够简单地生成词云,还提供了丰富的配置选项,使用户可以根据自己的需求定制词云的外观和布局。作为Python开源库中的一员,WordCloud 库已经被广泛应用于各种领域,包括数据分析、自然语言处理、社交媒体分析等。

在本文中,我们将深入探讨WordCloud库的使用方法、实际应用案例实践,帮助读者更好地理解和利用这一强大的工具。

  • github:https://github.com/amueller/word_cloud
  • 文档:https://amueller.github.io/word_cloud/

安装

pip install wordcloud

一、基本使用

1.1 文本生成词云

import osfrom os import path
from wordcloud import WordCloud# 获取当前py文件路径
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()# 读取文本
text = open(path.join(d, 'constitution.txt')).read()wordcloud = WordCloud().generate(text)wordcloud.to_file('1.jpg')
image = wordcloud.to_image()
image.show()

1

1.2 配置项

WordCloud() 可通过下面这些配置项定制词云的外观和布局

配置项类型默认值含义
font_pathstring字体路径
widthint400画布宽度
heightint200画布高度
marginint2词云图像的边距大小,以像素为单位
prefer_horizontalfloat0.9词语水平排列的偏好程度,>=1 水平排列
masknd-array or NoneNone词云的形状遮罩,使得词云图像能够按照指定的形状排列词语
contour_widthfloat0轮廓线的宽度
contour_colorcolor value“black”轮廓线的颜色
scalefloat1词云图像的缩放比例,即词云图像计算出来的大小相对于形状遮罩或者画布的大小的比例
min_font_sizeint4最小字体大小
font_stepint1字体的步长,关系词语间大小间隔
max_wordsnumber200词语最大数量
stopwordsset of strings or NoneSTOPWORDS要排除的词语
random_stateintNone随机数生成器的种子
background_colorcolor value”black”背景颜色
max_font_sizeint or NoneNone最大字体大小
modestring”RGB”主要有"RGB",“RGBA”,后者可以控制透明度
relative_scalingfloat‘auto’单词频率对字体大小影响,较大的值将增加词语之间的大小差异
color_funccallableNone自定义的颜色函数,该函数决定了词云中每个词语的颜色
regexpstring or NoneNone从输入文本中提取满足正则的词语,可选
collocationsboolTrue是否考虑词组
colormapstring or matplotlib colormap”viridis”词云的颜色映射,即词云中每个词语的颜色分布。常见的颜色映射包括单色映射(如灰度"gray")、渐变映射(“viridis”、“magma” 和 “inferno”)
normalize_pluralsboolTrue通过结尾为s 判断复数形式是否被视为同一个词
repeatboolFalse词语是否重复出现
include_numbersboolFalse是否包含数字
min_word_lengthint0个单词必须包含的最小字母数
collocation_thresholdint30词语搭配(Collocations)的显示阈值

二、进阶用法

2.1 自定义形状

先通过一张普通图片制作mask

import cv2
import numpy as np
from PIL import Image# 读取普通照片
image = cv2.imread('alice_color.png')# 将图像转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化图像,将图像转换为黑白二值图像
_, mask_image = cv2.threshold(gray_image, 250, 255, cv2.THRESH_BINARY)# 保存生成的蒙版图像
cv2.imwrite('mask_image.png', mask_image)import matplotlib.pyplot as pltplt.figure(figsize=(10, 5))# 显示第一张图片
plt.subplot(1, 2, 1)
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.title('Color Image')
plt.axis('off')# 显示第二张图片
plt.subplot(1, 2, 2)
plt.imshow(cv2.cvtColor(mask_image, cv2.COLOR_BGR2RGB))
plt.title('Mask Image')
plt.axis('off')# 显示图片
plt.show()

Figure_1

from os import path
from PIL import Image
import numpy as np
import osfrom wordcloud import WordCloud, STOPWORDSd = path.dirname(__file__) if "__file__" in locals() else os.getcwd()text = open(path.join(d, 'alice.txt')).read()alice_mask = np.array(Image.open(path.join(d, "mask_image.png")))stopwords = set(STOPWORDS)
stopwords.add("said")wc = WordCloud(background_color="white", max_words=2000, mask=alice_mask,stopwords=stopwords, contour_width=3, contour_color='steelblue')wc.generate(text)wc.to_file("alice.png")image = wc.to_image()
image.show()

alice.png

2.2 自定义着色

from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import osfrom wordcloud import WordCloud, STOPWORDS, ImageColorGeneratord = path.dirname(__file__) if "__file__" in locals() else os.getcwd()# Read the whole text.
text = open(path.join(d, 'alice.txt')).read()alice_coloring = np.array(Image.open(path.join(d, "alice_color.png")))
stopwords = set(STOPWORDS)
stopwords.add("said")wc = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,stopwords=stopwords, max_font_size=40, random_state=42)
# generate word cloud
wc.generate(text)# create coloring from image
image_colors = ImageColorGenerator(alice_coloring)# show
fig, axes = plt.subplots(1, 3)
axes[0].imshow(wc, interpolation="bilinear")
# recolor wordcloud and show
# we could also give color_func=image_colors directly in the constructor
axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
axes[2].imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
for ax in axes:ax.set_axis_off()
plt.show()

123

2.3 自定义词频

当已经有了词频统计好的数据,或者想要自定义词语的词频时,可以使用 generate_from_frequencies() 函数实现自定义词频

import multidict as multidictimport numpy as npimport os
import re
from PIL import Image
from os import path
from wordcloud import WordCloud
import matplotlib.pyplot as pltdef getFrequencyDictForText(sentence):fullTermsDict = multidict.MultiDict()tmpDict = {}# making dict for counting frequenciesfor text in re.sub(r'\n', ' ', sentence).split(" "):if re.match("a|the|an|the|to|in|for|of|or|by|with|is|on|that|be", text):continueval = tmpDict.get(text, 0)tmpDict[text.lower()] = val + 1for key in tmpDict:fullTermsDict.add(key, tmpDict[key])return fullTermsDictdef makeImage(text):alice_mask = np.array(Image.open("mask_image.png"))wc = WordCloud(background_color="white", max_words=1000, mask=alice_mask)# generate word cloudwc.generate_from_frequencies(text)# showplt.imshow(wc, interpolation="bilinear")plt.axis("off")plt.show()# get data directory (using getcwd() is needed to support running example in generated IPython notebook)
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()text = open(path.join(d, 'alice.txt'), encoding='utf-8')
text = text.read()
makeImage(getFrequencyDictForText(text))

2.4 中文

import jieba
from os import path
from imageio import imread
import matplotlib.pyplot as plt
import osfrom wordcloud import WordCloud, ImageColorGeneratorstopwords_path = 'stopwords_cn_en.txt'
font_path = r'C:\Windows\Fonts\simfang.ttf'# Read the whole text.
text = open('CalltoArms.txt', encoding = 'utf-8').read()mask = imread('LuXun_mask.png')userdict_list = ['阿Q', '孔乙己', '单四嫂子']def jieba_processing_txt(text):for word in userdict_list:jieba.add_word(word)mywordlist = []seg_list = jieba.cut(text, cut_all=False)liststr = "/ ".join(seg_list)with open(stopwords_path, encoding='utf-8') as f_stop:f_stop_text = f_stop.read()f_stop_seg_list = f_stop_text.splitlines()for myword in liststr.split('/'):if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:mywordlist.append(myword)return ' '.join(mywordlist)wc = WordCloud(font_path=font_path, background_color="white", max_words=2000, mask=mask,max_font_size=100, random_state=42, width=1000, height=860, margin=2,)wc.generate(jieba_processing_txt(text))
wc.to_file('LuXun.png')

luxun

luxun

三、实际案例

3.1 工作报告词云

数据来源:https://python123.io/resources/pye/%E6%96%B0%E6%97%B6%E4%BB%A3%E4%B8%AD%E5%9B%BD%E7%89%B9%E8%89%B2%E7%A4%BE%E4%BC%9A%E4%B8%BB%E4%B9%89.txt

import jieba
from os import path
from imageio import imread
import matplotlib.pyplot as plt
import osfrom wordcloud import WordCloud, ImageColorGeneratorstopwords_path = 'stopwords_cn_en.txt'
font_path = r'C:\Windows\Fonts\simfang.ttf'# Read the whole text.
text = open('新时代.txt', encoding = 'utf-8').read()mask = imread('china_mask.png')# The function for processing text with Jieba
def jieba_processing_txt(text):mywordlist = []seg_list = jieba.cut(text, cut_all=False)liststr = "/ ".join(seg_list)with open(stopwords_path, encoding='utf-8') as f_stop:f_stop_text = f_stop.read()f_stop_seg_list = f_stop_text.splitlines()for myword in liststr.split('/'):if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:mywordlist.append(myword)return ' '.join(mywordlist)wc = WordCloud(font_path=font_path, background_color="white", max_words=2000, mask=mask,max_font_size=100, random_state=42, width=1000, height=860, margin=2,)wc.generate(jieba_processing_txt(text))
wc.to_file('时代.png')

baogao

3.2 周杰伦歌词词云

数据来源:https://github.com/ShusenTang/Dive-into-DL-PyTorch/blob/master/data/jaychou_lyrics.txt.zip

import jieba
from os import path
from imageio import imread
import cv2
import numpy as np
import matplotlib.pyplot as plt
import osfrom wordcloud import WordCloud, ImageColorGeneratorstopwords_path = 'stopwords_cn_en.txt'
font_path = r'C:\Windows\Fonts\simfang.ttf'# Read the whole text.
text = open('jaychou_lyrics.txt', encoding = 'utf-8').read()image = imread('jay.jpg')
mask = imread('jay_mask.png')# The function for processing text with Jieba
def jieba_processing_txt(text):mywordlist = []seg_list = jieba.cut(text, cut_all=False)liststr = "/ ".join(seg_list)with open(stopwords_path, encoding='utf-8') as f_stop:f_stop_text = f_stop.read()f_stop_seg_list = f_stop_text.splitlines()for myword in liststr.split('/'):if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:mywordlist.append(myword)return ' '.join(mywordlist)wc = WordCloud(font_path=font_path, background_color="white", max_words=2000, mask=mask,max_font_size=100, random_state=42, width=1000, height=860, margin=2,)wc.generate(jieba_processing_txt(text))image_colors = ImageColorGenerator(np.array(image))
color = wc.recolor(color_func=image_colors)plt.figure(figsize=(10, 5))# 显示第一张图片
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title('Color Image')
plt.axis('off')# 显示第二张图片
plt.subplot(1, 2, 2)
plt.imshow(color)
plt.title('WordCloud Image')
plt.axis('off')# 显示图片
plt.show()

jay

四、总结

4.1 优点和局限性

优点有:

  • 直观:通过生成词云图像,直观展示了文本数据中的关键词和热点内容,使得信息一目了然。
  • 灵活性:可通过调整参数和样式,定制化生成符合需求的词云图像,满足不同场景下的需求。
  • 便捷性:提供了简单易用的API接口,方便用户快速生成词云,无需复杂的编程知识。

在以下方面有局限性:

  • 可解释性有限:词云图像虽然直观,但对于详细的数据分析并不足够,无法提供每个词语在文本中的具体含义和背景。

  • 数据处理能力有限:在处理大规模文本数据时,WordCloud 库的性能可能受到限制,无法处理过大的数据集

4.2 展望未来发展

随着数据可视化技术的不断发展和应用场景的扩展,WordCloud 库可能会朝着以下方向发展:

  • 智能化:未来的WordCloud库可能会引入更多的自动化和智能化功能,如基于自然语言处理技术的关键词提取和主题分析,使得生成的词云更加准确和有针对性。
  • 多模态融合:未来的词云图像可能会与其他形式的可视化技术进行融合,如图表、地图等,实现多模态数据展示,提供更加全面和丰富的信息呈现。
  • 数据互动性:未来的 WordCloud 库可能会加强与用户的交互性,支持用户对词云图像进行实时调整和定制,以及与其他数据进行联动分析,提升用户体验和数据分析效率。

参考

  1. Python—— 文件和数据格式化(模块6: wordcloud库的使用)(实例:自动轨迹绘制&政府工作报告词云)

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

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

相关文章

单链表和文件操作使用练习:通讯录

1. 项目文件组成(vs2022) 1. Contact.h和Contact.c分别为实现通讯录的头文件和源文件。 2. SList.h和SList.c分别为实现单链表的头文件和源文件。 3. test.c为测试用的源文件,用于调用通讯录提供的函数。 4. Contact.txt用于存储联系人信息。…

【热门话题】PyTorch:深度学习领域的强大工具

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 PyTorch:深度学习领域的强大工具一、PyTorch概述二、PyTorch核心特性…

【华为OD机试】围棋的气【C卷|100分】

题目描述 围棋棋盘由纵横各19条线垂直相交组成,棋盘上一共19 x 19 = 361 个交点, 对弈双方一方执白棋,一方执黑棋,落子时只能将棋子置于交点上。 “气”是围棋中很重要的一个概念,某个棋子有几口气,是指其上下左右方向四个相邻的交叉点中, 有几个交叉点没有棋子,由此可…

RabbitMQ消息模型之Direct消息模型

Direct消息模型 * 路由模型: * 一个交换机可以绑定多个队列 * 生产者给交换机发送消息时,需要指定消息的路由键 * 消费者绑定队列到交换机时,需要指定所需要消费的信息的路由键 * 交换机会根据消息的路由键将消息转发到对应的队…

解锁创意无限,体验全新Adobe Illustrator 2021 for mac/Win中文版

在数字化创意的浪潮中,Adobe Illustrator 2021中文版无疑是设计师们的得力助手。这款软件集高效、便捷、创新于一体,无论是Mac还是Windows用户,都能在其中找到属于自己的创意空间。 Adobe Illustrator 2021中文版延续了其强大的矢量图形处理…

循环双链表的操作

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 每一个裂缝都是为透出光而努力&#…

FFmpeg: 自实现ijkplayer播放器--04消息队列设计

文章目录 播放器状态转换图播放器状态对应的消息: 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列,用于发送,设置播放…

[lesson33]C++中的字符串类

C中的字符串类 历史遗留问题 C语言不支持真正意义上的字符串C语言用字符数组和一组函数实现字符串操作C语言不支持自定义类型,因此无法获得字符串类型 解决方案 从C到C的进化过程引入自定义类型在C中可以通过类完成字符串类型的定义 标准库中的字符串类 C语言直…

学鸿蒙开发的优劣势,你清楚吗?建议你了解一下!

随着科技的不断发展和智能设备的普及,鸿蒙系统作为华为自主研发的操作系统,正逐渐受到市场的关注。2024年,学鸿蒙开发是否有前途,成为了很多开发者关心的问题。本文将从多个角度分析鸿蒙系统的发展前景,以及学习鸿蒙开…

Android使用shape属性绘制边框内渐变色

目录 先上效果图实现方法shape属性介绍代码结果 先上效果图 这是使用AndroidStudio绘制的带有渐变色的边框背景色 实现方法 项目中由于UI设计需求,需要给按钮、控件设置带有背景色效果的。以下是UI效果图。 这里我们使用shape属性来绘制背景效果。 shape属性介…

Leetcode-48-旋转图像

题目说明 给定一个 n n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入…

如何在横向渗透攻击中寻到一线生机

横向渗透,作为计算机网络中的一种攻击技术,展现出了攻击者如何巧妙地利用同一级别系统间的漏洞和弱点,扩大其网络访问权限。与纵向渗透不同,横向渗透不关注权限的垂直提升,而是更侧重于在同一层级内扩展影响力。 横向…

Python数据容器(一)

一.数据容器入门 1.Python中的数据容器:一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。 2.数据容器根据特点的不同,如&#…

VTK —— 一、Windows10下编译VTK源码,并用Vs2017代码测试(附编译流程、附编译好的库、vtk测试源码)

效果 编译 1、下载VTK8.2.0源码        2、解压源码后,进入目录创建build目录,同时在build内创建install目录 (下图install目录是在cmake第一次后才手动创建,建议在创建build时创建)        3、打开CMake,如下图填入…

卷积神经网络结构组成与解释

卷积神经网络结构组成与解释 卷积神经网络是以卷积层为主的深度网路结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。 1. 卷积层 常见的卷积操作如下&#x…

UE5学习日记——实现自定义输入及监听输入,组合出不同的按键输入~

UE5的自定义按键和UE4有所不同,在这里记录一下。 本文主要是记录如何设置UE5的自定义按键,重点是学会原理,实际开发时结合实际情况操作。 输入映射 1. 创建输入操作 输入操作并不是具体的按键映射,而是按键的激活方式&#xff0…

Avalonia中MVVM模式下设置TextBox焦点

Avalonia中MVVM模式下设置TextBox焦点 前言引入Nuget库程序里面引入相关库修改前端代码#效果图 前言 我们在开发的过程中,经常会遇到比如我在进入某个页面的时候我需要让输入焦点聚焦在指定的文本框上面,或者点击某个按钮触发某个选项的时候也要自动将输入焦点聚焦到指定的文…

制作一个OpenHarmony视频播放器

简介 媒体子系统是 OpenHarmony 中重要的子系统,可以提供音视频播放能力。媒体子系统为开发者提供一套简单且易于理解的接口,使得开发者能够方便接入系统并使用系统的媒体资源。媒体子系统提供以下常用功能: 音视频播放(AVPlaye…

比特币减半:挑战与机遇

比特币减半是加密货币领域中一件备受关注的大事,它不仅影响着比特币本身的发展,也深刻影响着整个加密货币市场的走势。在这个历史性时刻,我们有必要深入分析比特币减半带来的挑战与机遇,以及未来的加密货币发展趋势。 挑战&#x…

【Entity Framework】聊一聊EF中继承关系

【Entity Framework】聊一聊EF中继承关系 文章目录 【Entity Framework】聊一聊EF中继承关系一、概述二、实体类型层次结构映射三、每个层次结构一张表和鉴别器配置四、共享列五、每个类型一张表配置六、每个具体类型一张表配置七、TPC数据库架构八、总结 一、概述 Entity Fra…