实战:生成个性化词云的Python实践【7个案例】

news2024/11/18 20:14:20

文本挖掘与可视化:生成个性化词云的Python实践【7个案例】

词云(Word Cloud),又称为文字云或标签云,是一种用于文本数据可视化的技术,通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中,更频繁出现的单词会显示得更大,反之则更小。

词云的好处和作用:

  1. 直观展示关键词:词云可以快速展示文本中的主要概念和关键词,使观众能够一眼识别文本的主要内容。

  2. 强调重要性:通过字体大小的不同,词云可以直观地表达不同单词的重要性,有助于突出显示文本中的核心议题。

  3. 美观:词云可以设计成各种形状和颜色,具有很高的艺术性和观赏性,可以吸引观众的注意力。

  4. 信息压缩:词云将大量文本信息压缩成一张图,便于快速浏览和理解,尤其适合于社交媒体和快速消费的阅读环境。

  5. 数据探索:在数据分析和文本挖掘中,词云可以作为探索性数据分析的工具,帮助发现数据中的模式和趋势。

  6. 报告和演示:词云常用于报告和演示中,以图形化的方式展示研究结果或分析结论。

  7. 情感分析:在社交媒体监控和情感分析中,词云可以帮助快速识别公众对某个话题或品牌的普遍态度。

  8. 教育工具:在教育领域,词云可以作为教学工具,帮助学生理解文本结构和主题。

  9. 交互性:一些词云工具允许交互,用户可以点击词云中的单词以获取更多信息或执行搜索。

  10. 多语言支持:词云不仅限于英文,也支持中文、日文、阿拉伯文等其他语言,使其成为一种跨语言的可视化工具。

词云的生成通常涉及文本预处理(如去除停用词、标点符号等),然后根据单词的权重(如词频或TF-IDF分数)来调整字体大小,最后使用图形库(如PIL/Pillow)生成图像。尽管词云非常有用,但也存在局限性,如难以展示复杂的语法结构和语义关系,因此在实际应用中需要根据具体需求谨慎使用。

词云的实现

主要用到对 wordcloudmatplotlib 这两个Python库

以下是对 wordcloudmatplotlib 这两个Python库的简单介绍:

WordCloud

WordCloud 是一个流行的Python库,用于生成词云。词云是一种通过不同大小的单词来表示文本数据中单词频率的可视化方法。单词出现得越频繁,它们在词云中显示得越大。这个库非常灵活,允许用户自定义词云的许多方面,包括:

  • 词汇的排除和包含
  • 字体、颜色和形状的选择
  • 词云的布局和格式
  • 以及更多…

WordCloud 库通常用于数据分析、文本挖掘和可视化,以直观地展示文本数据的关键特征。

Matplotlib

Matplotlib 是Python中一个广泛使用的绘图库,它提供了一个类似于MATLAB的绘图框架,用于创建各种静态、交互式和动画的可视化图表。Matplotlib 支持多种输出格式,并且可以无缝地与各种Python环境集成,包括IPython、Jupyter notebook等。

Matplotlib 的主要特点包括:

  • 生成线图、散点图、柱状图等多种类型的图表。
  • 丰富的图表定制选项,如标题、图例、坐标轴标签等。
  • 支持多种绘图样式和布局。
  • 提供了多种工具来操作图形元素,如线条、文本、标签和注解。
  • 可以生成高分辨率的栅格图形或矢量图形。

Matplotlib 是数据科学、机器学习、科学计算和商业分析中常用的可视化工具之一。

这两个库结合使用时,可以创建出既美观又信息丰富的词云图像,帮助用户快速把握文本数据的关键信息。

环境版本

编辑器: pycharm

环境版本:

  • python3.7

  • wordcloud 1.9.3

  • matplotlib 3.5.3

案例01:最简调用

代码:

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

from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 打开文本
text = open('constitution.txt').read()
# 生成对象
wc = WordCloud().generate(text)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

# 保存到文件
wc.to_file('wordcloud.png')

这段代码是使用Python编写的,它的作用是生成一个词云(WordCloud),词云是一种可视化技术,用于显示文本数据中单词的频率。具体来说,这段代码做了以下几件事情:

  1. 导入必要的库:

    • WordCloud 用于生成词云。
    • matplotlib.pyplot 用于显示词云的图形。
  2. 打开一个名为 constitution.txt 的文本文件,读取其内容,并将其存储在变量 text 中。

  3. 使用 WordCloud 类生成一个词云对象 wc,将文本数据传递给 generate 方法。

  4. 使用 matplotlib 库显示生成的词云:

    • plt.imshow(wc, interpolation='bilinear') 显示词云图像。
    • plt.axis('off') 关闭坐标轴。
    • plt.show() 显示图形。
  5. 将生成的词云保存到一个名为 wordcloud.png 的文件中。

要运行这段代码,你需要确保有 wordcloudmatplotlib 这两个Python库安装在你的系统中,并且有一个名为 constitution.txt 的文本文件存在于代码运行的同一目录下。该文本文件应该包含你想要生成词云的文本数据。运行代码后,你将在当前目录下得到一个名为 wordcloud.png 的词云图片文件。

运行结果如下:

main_1

案例02:中文不分词

代码:

# -*- coding: utf-8 -*-
# 中文不分词
from wordcloud import WordCloud
import matplotlib.pyplot as plt

# 打开文本:吴承恩的西游记,指定使用utf-8编码读取
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()
# 生成对象
wc = WordCloud(font_path='../Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

# 保存到文件
wc.to_file('main_2.png')

运行结果:

main_2

案例03:中文分词

为什么中文文本需要分词:

分词(Tokenization)是文本处理中的一个术语,指的是将文本分解成更小的单元,通常是单词或者词语。在中文文本处理中,分词尤为重要,因为中文书写时通常不会像英文那样使用空格来分隔单词。

  1. 语言结构:中文书写习惯中,单词之间没有明显的分隔符,一个长句子如果不进行分词,很难确定词与词之间的界限。

  2. 计算和统计:分词后,可以更准确地进行词频统计,这对于文本挖掘、情感分析、机器学习等应用至关重要。

  3. 信息提取:分词可以帮助识别文本中的关键信息,如人名、地名、机构名等。

  4. 搜索和检索:搜索引擎和推荐系统通常依赖于分词来提高搜索和推荐的准确性。

  5. 自然语言理解:分词是自然语言理解(NLP)的第一步,有助于后续的语言模型和机器学习算法更好地处理文本数据。

代码中,使用jieba库进行中文分词:

# 中文分词
text = ' '.join(jieba.cut(text))

这里,jieba.cut(text)会返回一个生成器,其中包含了文本text的分词结果。使用' '.join()将分词结果连接成一个由空格分隔的字符串,以便WordCloud库可以正确地处理和生成词云。

jieba是中文分词领域的一个非常流行的Python库,它支持三种分词模式:

  • 精确模式:试图将句子最精确地切分。
  • 全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
  • 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎构建索引。

最后,使用分词后的文本生成词云,可以更准确地反映出文本中各个词语的重要性和频率,从而生成更有意义的词云图像。

代码:

# -*- coding: utf-8 -*-
# 中文,分词
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 生成对象
wc = WordCloud(font_path='../Hiragino.ttf', width=800, height=600, mode='RGBA', background_color=None).generate(text)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

# 保存到文件
wc.to_file('wordcloud.png')

运行结果:

wordcloud

案例04:使用蒙版形状

代码:

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

from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 生成对象
mask = np.array(Image.open("../black_mask.png"))
wc = WordCloud(mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate(text)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

# 保存到文件
wc.to_file('main_4.png')

蒙版:

black_mask

运行结果:

main_4

案例05:使用蒙版颜色

代码:

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

from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 生成对象
mask = np.array(Image.open("../color_mask.png"))
wc = WordCloud(mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate(text)

# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

# 保存到文件
wc.to_file('main_5.png')

运行结果:

main_5

案例06:蒙版-自定义颜色函数

代码:

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

from wordcloud import WordCloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import random
import jieba

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 中文分词
text = ' '.join(jieba.cut(text))
print(text[:100])

# 颜色函数
def random_color(word, font_size, position, orientation, font_path, random_state):
	s = 'hsl(0, %d%%, %d%%)' % (random.randint(60, 80), random.randint(60, 80))
	print(s)
	return s

# 生成对象
mask = np.array(Image.open("../color_mask.png"))
wc = WordCloud(color_func=random_color, mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate(text)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

# 保存到文件
wc.to_file('main_06.png')

效果图:

main_06

案例07:蒙版-提取关键词和权重

代码:

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

from wordcloud import WordCloud, ImageColorGenerator
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba.analyse

# 打开文本
with open('../xyj.txt', 'r', encoding='utf-8') as f:
    text = f.read()

# 提取关键词和权重
freq = jieba.analyse.extract_tags(text, topK=200, withWeight=True)
print(freq[:20])
freq = {i[0]: i[1] for i in freq}

# 生成对象
mask = np.array(Image.open("../color_mask.png"))
wc = WordCloud(mask=mask, font_path='../Hiragino.ttf', mode='RGBA', background_color=None).generate_from_frequencies(freq)

# 从图片中生成颜色
image_colors = ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)

# 显示词云
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

# 保存到文件
wc.to_file('main_07.png')

效果图:

main_07

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

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

相关文章

CVPR2022医疗图像-GBCNet网络:胆囊癌(GBC)超声(USG)图像检测模型

Surpassing the Human Accuracy:Detecting Gallbladder Cancer from USG Images with Curriculum Learning:超越人类的准确性:基于课程学习的USG图像检测胆囊癌 目录 一、背景与意义 二、介绍 三、网络框架 3.1 区域选择网络 3.2 MS-SoP分类器 3.3 多尺度块 …

前端加载excel文件数据 XLSX插件的使用

npm i xlsx import axios from axios; axios //这里用自己封装的http是不行的,踩过坑.get(url,{ responseType: "arraybuffer" }).then((re) > {console.log(re)let res re.datavar XLSX require("xlsx");let wb XLSX.read(r…

20240523每日运维--------聊聊docker简介(一)

dotCloud 说Docker,必不可免不得不说dotCloud,Docker本来只是dotCloud公司的内部项目,其公司创始人 Solomon Hykes 发了一个内部项目,而这个项目就是Docker,自从2013年docker开源以后,在世界范围引起相当轰…

【设计模式】JAVA Design Patterns——Bridge(桥接模式)

🔍目的 将抽象与其实现分离,以便二者可以独立变化。 🔍解释 真实世界例子 考虑一下你拥有一种具有不同附魔的武器,并且应该允许将具有不同附魔的不同武器混合使用。 你会怎么做? 为每个附魔创建每种武器的多个副本&…

Android 性能为王时代SparseArray和HashMap一争高下

文章目录 一、SparseArray 源码分析1. **类定义和构造函数**2. **基本方法**2.1 put(int key, E value)2.2 get(int key)2.3 delete(int key)2.4 removeAt(int index)2.5 gc()2.6 size()2.7 keyAt(int index) 和 valueAt(int index) 3. **辅助方法**3.1 binarySearch() 二、使用…

Axure软件安装教程

链接:https://pan.baidu.com/s/1fHrSrZ7PIeDZZpn6QyJ6jQ?pwdb4mv 提取码:b4mv 安装完后点击Finish 名字随便起 关闭Axure 复制到安装目录下 最后成果

SQL学习小记(一)

SQL学习小记(一) 1. 存储过程&存储函数1.1. 存储过程1.2. 存储函数 2. DEFINER3. INSERT INTO(插入新记录)4. REPLACE()…AS…5. SUM()函数6. CASE WHEN7. STR_TO_DATE日期时间处理函数8. SUBSTRING函数9. dateFormat函数10. …

Python数据可视化(六)

实现事件处理效果 我们借助 matplotlib 可以实现事件处理效果,例如,单击关闭画布会出现画布被关闭的文本提 示,在画布上的图形界面任意位置单击可以获得放大后的此处图形界面等。下面,我们就挑选一些 典型的事件处理案例来讲解实现…

7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)

1 TL Settings Transaction Layer (TL)设置只在Advanced模式下有效。 Endpoint: Unlock and PME_Turn_Off Messages: 与端点的电源管理相关,允许发送解锁和电源管理事件关闭消息。 Root Port: Error Messages: Error Correctable(错误可纠正&#xff09…

探数API统计分享-1949年-2021年中国历年夏粮产量统计报告

​​​​​​​​中国历年夏粮产量​,为1949年到2021年我国每年的夏粮产量数据。2021年,我国夏粮产量为14596万吨,比上年增长2.2%。 数据统计单位为:万吨 。 我国夏粮产量有多少? 2021年,我国夏粮产量为1…

【小白向】MAC端VSCode C++环境配置(超干货、超详细)

提示:使用环境为 MAC(M2) 其实 VSCode 很早就下载好了,但是因为在配置过程中总是遇到很多坑,搁置了很久,回头捡起遇到报 Error 还是两眼抓瞎,到处翻 blog。为了减少以后的遇坑可能性&#xff0c…

uniapp开发安卓app高德地图

uniapp开发安卓app高德地图 一、高德创建key二、uniapp配置三、uniapp打包证书获取 一、高德创建key 优先去高德地图开发者平台去创建关联项目 高德开发者平台 打开我的应用,添加key 进行高德key的配置 其中key建议设置成app的名称,便于区分SHA1获取可以…

【ChatGPT】 Microsoft Edge 浏览器扩展使用 GPT

【ChatGPT】添加 Microsoft Edge 浏览器插件免费使用 GPT 文章目录 准备工作添加扩展注意事项 使用 ChatGPT 可以更高效的搜索到想要的内容,有效节约在搜索引擎中排查正确信息的时间。 准备工作 准备一台可上网的电脑电脑上安装有 Windows 自带的 Microsoft Edge …

剪画小程序:3个方法:告诉你如何将普通的照片转换成动漫二次元风格!

Hello!亲爱的小伙伴们! 你是否还在纠结于自己的自拍太普通,每次分享到社交账号上都觉得平平无奇,引不起波澜? 假如,你和朋友们一起出去玩,大家都开心地拍着自拍。你看着自己的照片&#xff0c…

【ONE·MySQL || 视图和用户管理】

总言 主要内容:介绍MySQL中视图和用户管理。             文章目录 总言1、视图1.1、基本介绍1.2、相关操作1.2.1、创建及查看视图1.2.2、修改视图1.2.3、更新视图1.2.4、删除视图 2、用户管理2.1、用户管理2.1.1、基本介绍2.1.2、使用用户登录MySQL服务器2…

MyBatis中Where标签:揭秘高效SQL构建的秘密

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 理解Where标签的基础概念 在MyBatis中&#xff0c;<where>标签是用于构建SQL查询语句中的一个非常重要的元素。它允许你在一个动态的SQL语句中添加WHERE子句&#xff0c;而不需要担心SQL语法错误或额外的逗号…

【Linux】之【Get√】查看linux CPU 架构 ---- amd64、x86、x86_64、arm64

关于Linux软件下载时&#xff1a;amd64、x86、x86_64、arm64 的说明 archuanme -alscpu

MySQL中视图是什么,有什么作用

目录 一、视图的简介 1.1 什么是视图&#xff1f; 1.2 为什么使用视图&#xff1f; 1.3 视图有哪些规则与限制&#xff1f; 1.4 视图能否更新&#xff1f; 二、视图的创建 三、视图的作用 3.1 用视图简化复杂的联结 3.2 用视图格式化检索出的数据 3.3 用视图过滤数据…

数字人系统OEM源码及赚钱方式详解!

当前&#xff0c;数字人直播的热度持续上涨&#xff0c;应用场景日益丰富。而随着数字人直播所蕴含的前景和潜力被不断挖掘一批又一批的创业者纷纷开始入局分羹。其中&#xff0c;数字人系统OEM源码模式作为最为常见的入局方式之一&#xff0c;更是备受瞩目。 所谓数字人系统O…

机器人开源项目分享,助力一户一机器人

最初&#xff0c;因隋炀帝思念心切&#xff0c;命工匠按照柳抃的形象制作了木偶机器人&#xff0c;被认为是历史上最早的机器人之一。这些木偶机器人通过精巧设计的机关&#xff0c;能够执行坐、起、拜、伏等动作。 如今&#xff0c;随着科技的发展&#xff0c;机器人已经广泛…