首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >第八章: Python 生成词云-jieba库与和wordcloud 库

第八章: Python 生成词云-jieba库与和wordcloud 库

作者头像
啊阿狸不会拉杆
发布2026-01-21 10:10:43
发布2026-01-21 10:10:43
2410
举报

在数据可视化领域,词云是一种直观展示文本数据中关键词频率分布的方式。今天,我将手把手教大家如何利用 Python 中的 jieba 库(用于中文分词)和 wordcloud 库(用于生成词云)打造属于自己的词云图。资源绑定附上本章完整资源供读者参考学习。

一、环境搭建与库安装

在开始之前,确保你的 Python 环境已安装以下库。若未安装,可使用 pip 命令:

代码语言:javascript
复制
pip install jieba wordcloud matplotlib numpy pillow

二、核心步骤详解

步骤一:文本读取

代码语言:javascript
复制
with open(input_file, "r", encoding="utf-8") as f:
    text = f.read()

   这是整个流程的起点,我们将目标文本文件以 UTF-8 编码读取到程序中,存储为字符串变量 text,后续所有操作都将基于这份文本数据展开。

步骤二:中文分词

代码语言:javascript
复制
words = jieba.lcut(text)

     由于中文词语之间没有天然的分隔符,我们需要借助 jieba 库的 lcut() 函数对文本进行精确模式的分词,将连续的中文文本切割成一个个独立的词语,以列表形式存储在 words 变量中,这是生成词云的关键前置步骤。

步骤三:停用词处理

代码语言:javascript
复制
stopwords = set()
if stopwords_file:
    try:
        with open(stopwords_file, "r", encoding="utf-8") as f:
            stopwords = set([line.strip() for line in f])
    except FileNotFoundError:
        print(f"警告:未找到停用词文件 {stopwords_file},使用默认停用词")
        stopwords = {"的", "了", "和", "在", "是", "我", "你", "他"}  # 基础停用词

    停用词是指文本中频繁出现但对语义分析价值不大的词汇,如“的”“了”等。此处尝试从指定路径加载自定义停用词表,若文件不存在,则使用程序内置的基础停用词集合,目的是过滤掉这些无意义的词汇,使词云更聚焦于关键信息。

步骤四:过滤与词频统计

代码语言:javascript
复制
filtered_words = [word for word in words if len(word) > 1 and word not in stopwords]
word_counts = Counter(filtered_words)
top_words = word_counts.most_common(50)  # 取前50个高频词

    首先,通过列表推导式筛选出长度大于 1 且不在停用词列表中的词语,得到 filtered_words。接着,利用 Counter 类对这些词语进行词频统计,并提取出词频最高的前 50 个词作为词云的素材,既保证了词云的丰富度,又避免了信息过载。

步骤五:词云参数配置与生成

代码语言:javascript
复制
wc_config = {
    "font_path": font_path,          # 必须指定中文字体,否则中文显示异常
    "background_color": "white",     # 设置词云背景颜色
    "max_words": 50,                # 限定词云中最大显示词数,与前面提取的 top_words 数量对应
    "width": 400,                    # 调整词云图片宽度
    "height": 300,                   # 调整词云图片高度
    "colormap": "viridis"            # 选择词云颜色主题,丰富视觉效果
}

if mask_image:
    mask = np.array(Image.open(mask_image))
    wc_config["mask"] = mask

wordcloud = WordCloud(**wc_config).generate_from_frequencies(dict(top_words))

    这里定义了词云的各类参数,从字体路径、背景颜色到词的数量、图片尺寸以及色彩映射等,全方位定制词云样式。若提供了遮罩图片路径,还会将其转换为 numpy 数组作为词云形状的模板,使词云呈现特定轮廓。最后,通过 WordCloud 类的 generate_from_frequencies() 方法,基于前面统计的词频数据生成词云对象。

步骤六:词云展示与保存

代码语言:javascript
复制
plt.figure(figsize=(10, 8))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")

wordcloud.to_file(output_image)
print(f"词云已保存至: {output_image}")

plt.show()

    借助 matplotlib 库创建画布,以图像形式展示生成的词云,关闭坐标轴以获得更纯净的视觉效果。同时,使用 to_file() 方法将词云图片保存到指定路径,方便后续使用或分享,最后调用 show() 方法呈现词云图像。

三、关键函数速查表

jieba 库常用函数

函数名

参数

返回值

描述

lcut(text)

text: 待分词文本字符串

list: 分词后的词语列表

对文本进行精确模式分词

add_word(word)

word: 需添加的词语字符串

向分词词典中添加新词,提升分词准确度

wordcloud 库常用函数及参数

函数/参数名

类型

描述

WordCloud()

初始化词云生成器,可设置字体、背景色等参数

generate_from_frequencies(frequencies)

方法

基于词频字典生成词云

to_file(filename)

方法

将词云图片保存到指定文件路径

font_path

参数

指定中文字体路径,确保中文正常显示

background_color

参数

设置词云背景颜色

max_words

参数

限定词云中最大显示词数

width, height

参数

设置词云图片的宽度和高度

colormap

参数

定义词云的颜色主题

mask

参数

指定词云形状遮罩的 numpy 数组

四、完整示例代码

代码语言:javascript
复制
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from collections import Counter
import numpy as np
from PIL import Image

# ========== 配置参数 ==========
input_file = "2024雷军年度演讲.txt"      # 输入文本文件路径
output_image = "2024雷军年度演讲词云.png"    # 输出词云图片路径
stopwords_file = "停用词.txt"  # 停用词文件路径(可选)
font_path = "simhei.ttf"          # 中文字体文件路径(如宋体、黑体)
mask_image = '和平鸽轮廓.jpg'                 # 词云形状遮罩图片路径(可选)

# ========== 1. 读取文本文件 ==========
with open(input_file, "r", encoding="utf-8") as f:
    text = f.read()

# ========== 2. 中文分词处理 ==========
words = jieba.lcut(text)

# ========== 3. 加载停用词表 ==========
stopwords = set()
if stopwords_file:
    try:
        with open(stopwords_file, "r", encoding="utf-8") as f:
            stopwords = set([line.strip() for line in f])
    except FileNotFoundError:
        print(f"警告:未找到停用词文件 {stopwords_file},使用默认停用词")
        stopwords = {"的", "了", "和", "在", "是", "我", "你", "他"}  # 基础停用词

# ========== 4. 过滤停用词并统计词频 ==========
filtered_words = [word for word in words if len(word) > 1 and word not in stopwords]
word_counts = Counter(filtered_words)
top_words = word_counts.most_common(50)  # 取前50个高频词

# ========== 5. 生成词云 ==========
# 配置词云参数
wc_config = {
    "font_path": font_path,          # 必须指定中文字体
    "background_color": "white",     # 背景颜色
    "max_words": 50,                # 最大显示词数
    "width": 400,                    # 图片宽度
    "height": 300,                   # 图片高度
    "colormap": "viridis"            # 颜色主题
}

# 添加形状遮罩(可选)
if mask_image:
    mask = np.array(Image.open(mask_image))
    wc_config["mask"] = mask

# 创建词云对象
wordcloud = WordCloud(**wc_config).generate_from_frequencies(dict(top_words))

# ========== 6. 显示并保存词云 ==========
plt.figure(figsize=(10, 8))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")

# 保存词云图片
wordcloud.to_file(output_image)
print(f"词云已保存至: {output_image}")

# 显示词云(可选)
plt.show()

五、演示案例说明

案例一:2024 雷军年度演讲词云

     将上述代码中的 input_file 参数设置为 "2024雷军年度演讲.txt",运行程序后,即可生成基于雷军演讲内容的词云图,保存为 "2024雷军年度演讲词云.png"。从词云中可以直观看出演讲中重点提及的技术方向、产品规划以及战略目标等关键词,帮助读者快速把握演讲核心。

效果展示:

案例二:政府工作报告词云

    同理,若将 input_file 指向 "政府工作报告.txt",生成的词云将呈现报告中强调的施政重点、民生举措、经济发展规划等高频词汇,以可视化方式展现政府工作关注点,便于大众理解和传播。

效果展示:

       通过以上详细讲解与案例演示,相信大家已经掌握了利用 Python 生成词云的完整流程。无论是分析演讲稿、政策文件,还是其他各类文本数据,这一技能都能帮助我们更高效地挖掘文本价值,发现其中的规律与重点。在实际应用中,大家还可以根据需求调整参数、更换遮罩图片、优化停用词表等,打造更具个性化的词云作品。资源绑定附上本章完整资源供读者参考学习。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境搭建与库安装
  • 二、核心步骤详解
    • 步骤一:文本读取
    • 步骤二:中文分词
    • 步骤三:停用词处理
    • 步骤四:过滤与词频统计
    • 步骤五:词云参数配置与生成
    • 步骤六:词云展示与保存
  • 三、关键函数速查表
    • jieba 库常用函数
    • wordcloud 库常用函数及参数
  • 四、完整示例代码
  • 五、演示案例说明
    • 案例一:2024 雷军年度演讲词云
    • 效果展示:
      • 案例二:政府工作报告词云
    • 效果展示:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档