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

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

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

文章目录

  • 文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
    • 词云的好处和作用:
    • 词云的实现
      • WordCloud
      • Matplotlib
    • 环境版本
    • 案例01:最简调用
      • 代码:
      • 运行结果如下:
    • 案例02:中文不分词
      • 代码:
      • 运行结果:
    • 案例03:中文分词
      • 为什么中文文本需要分词:
      • 代码:
      • 运行结果:
    • 案例04:使用蒙版形状
      • 代码:
      • 蒙版:
      • 运行结果:
    • 案例05:使用蒙版颜色
      • 代码:
      • 运行结果:
    • 案例06:蒙版-自定义颜色函数
      • 代码:
      • 效果图:
    • 案例07:蒙版-提取关键词和权重
      • 代码:
      • 效果图:

词云的好处和作用:

  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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

技术支持与开发助手:Kompas AI的革新力量

一、引言 随着技术发展的迅猛进步,技术开发的高效需求日益增加。开发人员面临着更复杂的项目、更紧迫的时间表以及不断提高的质量标准。在这种背景下,能够提供智能支持的工具变得尤为重要。Kompas AI 正是在这种需求下应运而生的。它通过人工智能技术&a…

Arduino平台软硬件原理及使用——电位器模块的使用

文章目录 一、电位器工作原理 二、电位器与滑动变阻器的异同 三、电位器模块在Arduino中的使用 一、电位器工作原理 上图为市面上常见的电位器元件实物图,其结构及封装根据不同的应用场景也有着不同,但其原理及本质基本一致。 电位器是具有三个引出端、…

车牌号识别(低级版)

import cv2 from matplotlib import pyplot as plt import os import numpy as np from paddleocr import PaddleOCR, draw_ocr from PIL import Image, ImageDraw, ImageFont# 利用paddelOCR进行文字扫描,并输出结果 def text_scan(img_path):ocr PaddleOCR(use_a…

[Mysql] 数据库基本概念

前言---数据库系统发展史 当今主流数据库介绍 一、操作系统 Linux操作系统 :RedHat CentOS Debian Ubuntu OpenSUSE 信创标准 会让系统逐渐国产化 国产系统:华为 欧拉 阿里 龙蜥 腾讯 tencentOS 银河麒麟 中标麒麟…

Linux远程管理日志

实验介绍 本实验旨在实现主机将日志远程发送到堡垒机或远程服务器上,实现通过一台机器管理整个网络内的主机的效果。 准备两台虚拟机作为生产主机和管理机,保证网络通畅,展示如下: 关闭firewalld,通过配置rsyslog&a…

分布式锁实现方案

分布式锁 1 什么是分布式锁 ​ 就是在分布式环境下,保证某个公共资源只能在同一时间被多进程应用的某个进程的某一个线程访问时使用锁。 2 几个使用场景分析 一段代码同一时间只能被同一个不同进程的一个线程执行 库存超卖 (库存被减到 负数),上面案…

【机器学习】【深度学习】MXnet神经网络图像风格迁移学习简介

使用部分 一、编程环境 编程环境使用Windows11上的Anaconda环境,Python版本为3.6. 关于Conda环境的建立和管理,可以参考我的博客:【Anaconda】【Windows编程技术】【Python】Anaconda的常用命令及实操 二、项目结构(代码非原创…

CTF-pwn-虚拟化-【d3ctf-2021-d3dev】

文章目录 参考流程附件检查启动信息逆向分析漏洞查看设备配置信息exp 参考 https://x1ng.top/2021/11/26/qemu-pwn/ https://bbs.kanxue.com/thread-275216.htm#msg_header_h1_0 https://xz.aliyun.com/t/6562?time__1311n4%2BxnD0DRDBAi%3DGkDgiDlhjmYh2xuCllx7whD&alic…

Opencv学习项目2——pytesseract

上一次我们使用pytesseract.image_to_boxes来检测字符,今天我们使用pytesseract.image_to_data来检测文本并显示 实战教程 和上一次一样,添加opencv-python和pytesseract库 首先我们先来了解一下pytesseract.image_to_data pytesseract.image_to_data(…

无人值守工厂设备日志采集工具

免费试用下载: Gitee下载 最新版本 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

Exposure X7软件安装包下载 丨不限速下载丨亲测好用

根据使用者情况表明Exposure的设计鼓励您进行创造性的工作,使用涂刷和遮罩工具将效果有选择地应用于图片的特定区域,非破坏性图层使您能够混合预设和调整,以获得无尽的外观。我们都知道Exposure是用于创意照片编辑的最佳图片编辑器&#xff0…

【机器学习】使用Python实现图神经网络(GNN):图结构数据的分析与应用

🔥 个人主页:空白诗 文章目录 一、引言二、图神经网络的基础知识1. 图的基本概念和术语2. 传统的图分析方法3. 图神经网络的基本原理4. GNN的基本模型 三、主要的图神经网络模型1. 图卷积网络(Graph Convolutional Network, GCN)2…

086. 分隔链表

题目链接 一、题目描述 (一) 题目 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。 (二) 示例 示例 1: 输入&a…

2024.6.16 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、创新点 4、匹配问题 5、SuperGlue架构 5.1、注意力图神经网络(Attentional Graph Neural Network) 5.2、最佳匹配层(Optimal matching layer) 5.3、损失 6、实验 6.…

数据分析第三讲:numpy的应用入门(二)

NumPy的应用(二) 数组对象的方法 获取描述统计信息 描述统计信息主要包括数据的集中趋势、离散程度和频数分析等,其中集中趋势主要看均值和中位数,离散程度可以看极值、方差、标准差等,详细的内容大家可以阅读《统计…

【Java】已解决java.sql.SQLException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.sql.SQLException异常 在Java中,java.sql.SQLException是一个通用的异常类,用于表示在数据库操作中发生的错误。无论是类型错误、数据类型不匹配…

YOLOv10改进 | 注意力篇 | YOLOv10引入iRMB

1. iRMB介绍 1.1 摘要:本文重点关注开发现代、高效、轻量级的模型来进行密集预测,同时权衡参数、FLOP 和性能。 反向残差块(IRB)作为轻量级 CNN 的基础设施,但基于注意力的研究尚未认识到对应的部分。 这项工作从统一的角度重新思考高效IRB和Transformer有效组件的轻量级…

国际版游戏陪练源码电竞系统源码支持Android+IOS+H5

🎮电竞之路的得力助手 一、引言:电竞新纪元,陪练小程序助力成长 在电竞热潮席卷全球的今天,每一个电竞爱好者都渴望在竞技场上脱颖而出。然而,独自一人的游戏之路往往充满了挑战和困难。幸运的是,国际版游…

Flutter框架高阶——Window应用程序设置窗体窗口背景完全透明

文章目录 1.修改 main.cpp1)C 与 Win32 API2)EnableTransparency()3)中文注释 2.编写 Flutter 代码1)bitsdojo_window2)window_manager3)区别对比4)同时使用(1)设置初始化…

全球AI视频技术竞赛加速:Runway即将推出更优更快的第三代AI视频模型|TodayAI

Runway即将在未来几天推出其更优更快的第三代AI视频模型,这是新一代模型中最小的一个。据公司透露,这款名为Gen-3的模型将带来“在真实度、一致性和动态效果上的重大提升”,同时在速度上也有显著的加快。 去年六月,Runway首次推出…