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

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

一、环境搭建与库安装

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

pip install jieba wordcloud matplotlib numpy pillow

二、核心步骤详解

步骤一:文本读取

with open(input_file, "r", encoding="utf-8") as f:
    text = f.read()

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

步骤二:中文分词

words = jieba.lcut(text)

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

步骤三:停用词处理

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 = {"的", "了", "和", "在", "是", "我", "你", "他"}  # 基础停用词

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

步骤四:过滤与词频统计

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 个词作为词云的素材,既保证了词云的丰富度,又避免了信息过载。

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

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() 方法,基于前面统计的词频数据生成词云对象。

步骤六:词云展示与保存

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 数组

四、完整示例代码

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值