Python词云图的制作与案例分享(包含 wordcloud 和 jieba库)

news2024/12/24 2:16:11

一、基本知识

Python 有很多可用于制作词云图的库,其中比较常用的有 wordcloudjieba

wordcloud 是一个用于生成词云图的 Python 库,其使用了 Python 的 PIL 库和 numpy 库。您可以使用 pip 命令来安装 wordcloud 库:

pip install wordcloud

jieba 则是一个中文文本处理库,可以用于中文分词,即将一段中文文本切割成一个个独立的词汇。您也可以使用 pip 命令来安装 jieba 库:

pip install jieba

下面我们来看一个简单的例子。首先,我们需要先读取文本文件,并将其内容进行分词处理。此处我们使用 jieba 库来进行分词。下面是代码:

import jieba

# 读取文本内容
file_path = 'sample.txt'
with open(file_path, 'r', encoding='utf-8') as f:
    text = f.read()

# 使用 jieba 库进行分词
seg_list = jieba.cut(text)
words = ' '.join(seg_list)

# 打印分词结果
print(words)

然后,我们使用 wordcloud 库来生成词云图,并将分词结果传入 WordCloud 对象。下面是代码:

from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt

# 创建 WordCloud 对象
wc = WordCloud(background_color='white', stopwords=STOPWORDS,
               font_path='msyh.ttc', width=800, height=600)

# 生成词云图
wc.generate(words)

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

在这个例子中,我们使用了 msyh.ttc 字体来显示中文字符,可以根据您的需要选择其他字体。同时使用了 STOPWORDS 来过滤常见的无意义词汇。WordCloud 对象还可以接收一些其他参数,例如 max_font_sizemin_font_size 等等,以调整词语的字体大小。

二、案例

从以下三部小说中挑选一部,给出人物出现的频率统计以及对应的词云图。要求:减少跟任务无关的介词、动词等关键词,需要根据词云图看出人物出场频率。

分别是西游记、三国演义、红楼梦

import os
import re
from collections import Counter
import jieba
from wordcloud import WordCloud

# 读取文件内容
file_path = '红楼梦.txt'
if os.path.exists(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
else:
    print(f'文件 "{file_path}" 不存在!')
    text = ''

# 使用正则表达式去除所有非汉字字符和空白字符
text = re.sub(r'[^\u4e00-\u9fa5]', '', text)

# 使用 jieba 进行分词
seg_list = jieba.cut(text)
words = [word for word in seg_list if len(word) >= 2 and word not in ('他们', '一个', '自己', '没有', '什么', '那些', '就是', '还有', '已经')]

# 使用 Counter 统计每个词出现的次数,并只保留出现频率最高的前 50 个词
word_counts = Counter(words)
top_n = 50
words_top_n = word_counts.most_common(top_n)

# 打印前 top_n 个出现频率最高的词
for i, (word, count) in enumerate(words_top_n):
    print(f'第 {i+1} 高频词:{word}, 出现次数:{count}')

# 指定字体为宋体
# font_path = 'SimSun.ttf'
font_path = 'C:\\Windows\\Fonts\\simsun.ttc'  # Windows 系统下的宋体字体路径
wc = WordCloud(font_path=font_path, width=800, height=600, background_color='white',
               max_words=200, colormap='Dark2', contour_width=1, contour_color='black',
               stopwords={}, min_font_size=10, max_font_size=80)

# 生成词云图
wc.generate_from_frequencies(word_counts)

# 显示词云图
import matplotlib.pyplot as plt
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

结果:

 三、可能出现的报错

运行结果中可能会出现以下问题:

  1. 缺少文件错误: 如果指定的文本文件不存在,则会在控制台中输出“文件不存在”等提示信息,应该检查实际的文件路径是否正确。

  2. 编码错误: 如果读取的文本文件的编码不是 UTF-8,则可能会出现编码错误,此时程序无法正确地处理文本内容,需要指定正确的编码格式。

  3. 分词错误: 使用 Jieba 库进行中文分词时,可能会有一些无意义的词被保留下来影响词频统计和词云图生成效果,这时可以手动添加停止词列表,将无意义的词排除在外。还有一种情况是分词结果不准确,如将一个人名分成了两个词,需要手动处理。

  4. 字体错误: 如果在生成词云图时无法加载指定的字体文件,则可能会出现“cannot open resource”等错误,此时可以尝试更换字体文件或者重新安装 PIL 库。

  5. 显示问题: 在生成词云图后,可能会出现词云图显示过小或者过大、无法显示等问题,此时可以调整 WordCloud 类的参数,如 widthheight 来设置词云图的大小。

针对不同的问题,可以采取相应的解决方法。

四、一些常见词云图的模板

4.1读取txt文件中的内容生成词云图

以下是基于 Python 生成词云图的示例代码:

import os
from wordcloud import WordCloud

# 读取文件内容
file_path = 'your.file.txt'
if os.path.exists(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
else:
    print(f'文件 "{file_path}" 不存在!')
    text = ''

# 创建词云对象
wc = WordCloud(background_color='white', max_words=200, font_path='simhei.ttf')

# 生成词云图
wc.generate(text)

# 显示词云图
import matplotlib.pyplot as plt
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()

以上示例代码中,可以通过修改文件路径、背景颜色、生成的最大单词数、字体等参数以及调用 Matplotlib 库来自定义生成的词云图。其中,WordCloud 类提供了丰富的选项来生成高度定制化的词云图,例如可以通过 stopwords 参数指定需要过滤掉的单词列表,也可以通过 colormap 参数指定颜色方案,并可以通过 to_file 方法将词云图保存到文件中。这样我们就可以将学校主页上《学校简介》做成漂亮的词云图。

4.2读取txt文件中的内容生成词云图并安装要求指定形状

基于 Python 生成指定形状词云图的示例代码,以心形为例:

import os
from PIL import Image
import numpy as np
from wordcloud import WordCloud, ImageColorGenerator

# 读取文本文件内容
file_path = 'path/to/your/file.txt'
if os.path.exists(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()
else:
    print(f'文件 "{file_path}" 不存在!')
    text = ''

# 加载形状图片并转换为数组
pic_path = 'path/to/your/shape.png'
if os.path.exists(pic_path):
    image = Image.open(pic_path)
    mask = np.array(image)
else:
    print(f'文件 "{pic_path}" 不存在!')
    mask = None

# 创建词云对象
wc = WordCloud(background_color='white', max_words=200, font_path='simhei.ttf', mask=mask)

# 根据文本和形状生成颜色
wc.generate(text)
image_colors = ImageColorGenerator(mask)

# 绘制词云图并显示
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12,6))
axes[0].imshow(wc, interpolation='bilinear')
axes[1].imshow(wc.recolor(color_func=image_colors), interpolation='bilinear')
for ax in axes:
    ax.set_axis_off()
plt.tight_layout()
plt.show()

以上示例代码中,PIL 库用于加载形状图片,并将其转换为 NumPy 数组;WordCloud 类的 mask 参数用于指定形状;ImageColorGenerator 类则根据形状图像生成词云的颜色方案。

需要注意的是,指定形状可能会导致词云图中出现很多空白区域,因此一般要使用 recolor 方法将图像重新着色,以填充空白区域。此外还可以通过调整 min_font_sizemax_font_size 参数来控制单词大小,以便更好地适应形状。

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

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

相关文章

第12章 项目沟通管理和干系人管理

文章目录 12.1.2 沟通的方式 404沟通管理计划的编制过程12.2.2 制订沟通管理计划的工具 4114、沟通方法 12.3.2 管理沟通的工具 41312.4.2 控制沟通的技术和方法 4163、会议 12.5.1 项目干系人管理所涉及的过程 420项目干系人管理的具体内容:(1&#xff…

从“青铜”到“王者”,制造企业的数字化闯关记

打过游戏的朋友可能有一个常识,越是精彩纷呈、奖励丰厚的副本,越是需要召集队友一同组团闯关。很多实体企业在数字化转型中,也不会单打独斗,一把手会先找咨询公司对企业内外情况进行调研、梳理、规划,提出一个顶层规划…

科学计算库—numpy随笔【五一创作】

文章目录 8.1、numpy8.1.1、为什么用 numpy?8.1.2、numpy 数据类型推理8.1.3、numpy 指定长度数组快速创建8.1.4、numpy 哪个是行、列?8.1.5、numpy 如何进行数据类型转换?8.1.6、numpy 有几种乘法?8.1.7、numpy 索引和切片操作8.…

2023年前端面试题汇总-代码输出篇

1. 异步 & 事件循环 1. 代码输出结果 const promise new Promise((resolve, reject) > {console.log(1);console.log(2); }); promise.then(() > {console.log(3); }); console.log(4); 输出结果如下: 1 2 4 promise.then 是微任务,它…

【今日重磅—国产大模型首批内测机会来了】什么是讯飞星火,如何获得内测和使用方法

♥️作者:白日参商 🤵‍♂️个人主页:白日参商主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

数电实验:Quartus II 软件使用 (八进制计数器和全加器)

一、实验目的: 1.熟悉可编程逻辑器件的设计工具Quartus II 软件的使用。 2.熟悉FPGA开发实验系统的软件环境,掌握各个菜单和图标的作用和功能。 二、实验内容 (1)以74160实现八进制计数器为例,学Quartus II 软件的…

【手撕代码系列】JS手写实现Promise.all

Promise.all() 方法接收一个 Promise 对象数组作为参数,返回一个新的 Promise 对象。该 Promise 对象在所有的 Promise 对象都成功时才会成功,其中一个 Promise 对象失败时,则该 Promise 对象立即失败。 本篇博客将手写实现 Promise.all() 方…

Peforce(Helix) 使用快速介绍

虽然Git应该是当下使用最多的版本控管工具, 但曾经作为版本控管巨头的Perforce还是在持续的发展和更新中, 在某些企业中,还是作为软件的版本控管工具之一。 Helix 截止2023, Perforce 的最新版本的名称是Helix ,这个词翻译的意思是螺旋&…

【手撕代码系列】JS手写实现Promise.race

公众号:Code程序人生,分享前端所见所闻。 Promise.race() 是一个常见的 JavaScript Promise 方法,它接受一个 Promise 数组作为参数,并返回一个新的 Promise 对象。这个新的 Promise 对象在传入的 Promise 数组中,任意…

[架构之路-158]-《软考-系统分析师》-13-系统设计 - 高内聚低耦合详解、图解以及技术手段

目录 第1章 什么是高内聚低耦合 1.1 概念 1.2 目的 1.3 什么时候需要进行高内聚低耦合 1.4 什么系统需要关注高内聚、低耦合 第2章 分类 2.1 内聚的分类 2.2 耦合的分类 第3章 增加高内聚降低耦合度的方法 3.1 增加高内聚 3.2 降低耦合度 第1章 什么是高内聚低耦…

seurat -- 关于DE gene的讨论

实例 # 加载演示数据集 library(Seurat) library(SeuratData) pbmc <- LoadData("pbmc3k", type "pbmc3k.final")# list options for groups to perform differential expression on levels(pbmc)## [1] "Naive CD4 T" "Memory CD4 T…

Orangepi Zero2 全志H616(DHT11温湿度检测)

最近在学习Linux应用和安卓开发过程中&#xff0c;打算把Linux实现的温湿度显示安卓app上&#xff0c;于是在此之前先基于Orangepi Zero2 全志H616下的wiringPi库对DHT11进行开发&#xff0c;本文主要记录开发过程的一些问题和细节&#xff0c;主要简单通过开启线程来接收温湿度…

LeetCode1376. 通知所有员工所需的时间

【LetMeFly】1376.通知所有员工所需的时间 力扣题目链接&#xff1a;https://leetcode.cn/problems/time-needed-to-inform-all-employees/ 公司里有 n 名员工&#xff0c;每个员工的 ID 都是独一无二的&#xff0c;编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。…

QML动画分组(Grouped Animations)

通常使用的动画比一个属性的动画更加复杂。例如你想同时运行几个动画并把他们连接起来&#xff0c;或者在一个一个的运行&#xff0c;或者在两个动画之间执行一个脚本。动画分组提供了很好的帮助&#xff0c;作为命名建议可以叫做一组动画。有两种方法来分组&#xff1a;平行与…

SNAP + StaMPS 处理Sentinel-1哨兵1 时间序列

SNAP StaMPS 处理Sentinel-1哨兵1 时间序列 Step0: 文件准备及路径设置 0.1 前往GitHub下载snap2stamps: Github snap2stamps 0.2 新建工作路径&#xff0c;用来进行数据处理&#xff0c;并将下载的snap2stamps解压到该文件夹下&#xff0c;并新建两个文件夹&#xff0c;ma…

二叉搜索树的最小绝对差

1题目 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1示例 2&#xff1a; 输入&#xff1a;r…

证券从业资格证-考前复习

备考2023年6月证券从业资格证&#xff0c;每章思维导图及相关概念&#xff0c;用于考前复习 1. 金融市场基础知识 1.1 第一章 金融市场体系 #mermaid-svg-XEPZZTVBmo6nGm2Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merm…

【14.HTML-移动端适配】

移动端适配 1 布局视口和视觉视口1.1 设置移动端布局视口宽度 2 移动端适配方案2.1 rem单位动态html的font-size&#xff1b;2.2 vw单位2.3 rem和vw对比2.4 flex的弹性布局 1 布局视口和视觉视口 1.1 设置移动端布局视口宽度 避免布局视口宽度默认980px带了的缩放问题,并且禁止…

周赛343(模拟、网格图求最短路、贪心)

文章目录 周赛343[6341. 保龄球游戏的获胜者](https://leetcode.cn/problems/determine-the-winner-of-a-bowling-game/)模拟 技巧 [2661. 找出叠涂元素](https://leetcode.cn/problems/first-completely-painted-row-or-column/)模拟 [2662. 前往目标的最小代价](https://lee…