生成中文词云

Admin
发布于 2026-05-23 / 2 阅读
0
0

pip install jieba wordcloud matplotlib numpy pillow

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

# 1. 准备文本(Python相关关键词,和示例图对应)
text = """
Python 编程语言 Guido 罗苏 Rossum 科学计算 开发 软件
语言 计算机科学 程序设计 团队 设计 扩展 功能 提供
世纪 各个 处理 研究 C语言 版本 脚本 调用 平台
发布 逐渐 可以用于 作为 一种 诞生 以及 国家
BeOpen PythonLabs AB 实现 转到 继续
"""

# 2. 中文分词
words = jieba.lcut(text)
processed_text = " ".join(words)

# 3. 可选:自定义形状(用三叶草/爱心形状,和示例类似)
# 没有形状图就注释 mask 行,用默认矩形
# mask = np.array(Image.open("clover.png"))

# 4. 生成词云
wc = WordCloud(
    background_color="white",   # 背景色
    font_path="C:/Windows/Fonts/simhei.ttf",  # 中文字体(Windows)
    # Mac用:font_path="/System/Library/Fonts/PingFang.ttc"
    max_words=100,
    width=1000,
    height=1000,
    colormap="Set2",            # 配色方案
    prefer_horizontal=0.6,      # 水平词占比
    # mask=mask                # 开启自定义形状
)

wc.generate(processed_text)

# 5. 显示+保存
plt.figure(figsize=(10,10))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.show()

wc.to_file("python_wordcloud.png")

这段Python代码的主要功能是**生成中文词云**。它将一段关于Python编程语言的文本进行分词处理,并按照词汇出现频率(或指定权重)将它们以不同大小、颜色和排版绘制成一张图片。

下面我将从实现原理、用途和注意事项三个方面为您详细解释这段代码:

### 一、 实现原理与代码解析

代码的执行流程可以分为以下5个步骤:

1. **准备文本 text)**

- 代码定义了一个多行字符串,包含了Python的发展历史、应用领域等关键词。在实际应用中,这部分通常替换为从文件或网页抓取的长文本。

2. **中文分词 jieba.lcut)**

- **原理**:与英文不同,中文词语之间没有天然的空格分隔jieba(结巴分词)是最常用的Python中文分词库,它基于前缀词典实现高效的词图扫描,将连续的中文句子切分成词语列表。

- **操作**jieba.lcut(text) 将长字符串切分为列表(如 ['Python', '编程', '语言', ...])。随后,使用 " ".join(words) 用空格将列表重新拼接成字符串,因为 WordCloud 默认依靠空格来识别词的边界。

3. **自定义形状 mask,当前被注释)**

- **原理**:词云默认生成矩形。如果想要生成特定形状(如爱心、三叶草),需要提供一个同尺寸的掩码数组。

- **操作**:使用 PIL.Image 读取图片,再用 numpy.array 将其转化为数字矩阵。图片的**白色区域**(像素值为255)会被忽略,**非白色区域**将作为词云的绘制边界。当前代码为了通用性将此步注释。

4. **生成词云 WordCloud)**

- **核心配置项解释**:

- background_color="white":词云背景设为白色。

- font_path:**关键项**。必须指定支持中文的字体路径,否则中文会显示为方框。代码中提供了Windows(黑体)和Mac(苹方)的常见路径。

- max_words=100:最多显示100个词。

- colormap="Set2":使用matplotlib的"Set2"调色板为词汇上色。

- prefer_horizontal=0.6:60%的词汇水平排版,40%垂直排版,增加视觉变化。

- **操作**wc.generate(processed_text) 是核心触发方法,它读取分词后的文本,统计词频,并根据词频高低决定词汇在图中的字号大小(词频越高,字越大),然后进行布局计算。

5. **显示与保存 matplotlib & to_file)**

- plt.imshow(wc) 将词云对象作为图像渲染出来。

- plt.axis("off") 隐藏坐标轴,使画面更美观。

- wc.to_file() 将生成的词云保存为本地PNG图片。

---

### 二、 用途

词云图在数据分析和可视化领域非常受欢迎,主要用于:

1. **文本数据摘要**:快速直观地展示一篇文章、一本书或大量评论的核心关键词。

2. **用户画像/舆情分析**:将社交媒体上的用户留言、商品评价生成为词云,快速捕捉用户关注点(如“好用”、“卡顿”等)。

3. **PPT与报告美化**:在汇报材料中,词云比枯燥的表格更能吸引读者的注意力。

---

### 三、 注意事项

1. **中文字体路径问题(最常见报错)**

- 代码中的字体路径是硬编码的。如果你的电脑不是Windows,或者系统盘不在C盘simhei.ttf 可能找不到,导致中文显示为方块(俗称“豆腐块”)。

- **建议**:可以将一个 .ttf 中文字体文件下载到项目同级目录下,然后直接写 font_path="simhei.ttf",这样跨平台兼容性更好。

2. **中文分词的准确性**

- 结巴分词虽然强大,但有时会出现“过度切分”或“未切分”的情况。例如,“计算机科学”可能被切成“计算机”和“科学”。

- **建议**:可以使用 jieba.add_word("计算机科学") 来强制将特定词汇作为一个整体,或者使用 jieba.del_word() 去除不需要的词。

3. **停用词处理**

- 当前文本是手工整理的关键词,比较干净。但在真实场景中,文本会包含大量“的”、“是”、“了”等无意义词汇。如果不去除,词云将被这些高频虚词占据。

- **建议**:在 WordCloud 初始化时传入 stopwords 参数,如stopwords={"的", "是", "了", "以及", "可以"}

4. **词频控制**

- 默认情况下WordCloud 根据**词频**自动决定字体大小。如果你想让某些词特别大,即使它在文本中只出现一次,你需要放弃自动统计,改为手动传入词频字典,并使用 generate_from_frequencies() 方法。

5. **依赖库的安装**

- 运行此代码前,需确保已安装所有依赖库。可通过以下命令安装:

```bash

pip install jieba wordcloud matplotlib numpy pillow

```

如果你有具体的文本需要生成词云,或者在运行这段代码时遇到任何报错,随时告诉我,我可以帮你修改代码!


评论