一、环境准备
1. 安装必要的 Python 库
pip install jieba # 中文分词工具
pip install wordcloud # 生成词云
pip install matplotlib # 绘图库
pip install numpy # 处理图像数据(如果要用自定义形状)
pip install pillow # 图像处理(加载背景图)
2. 准备资源
文本文件:比如
text.txt
(存放你要分析的中文文本)停用词表:比如
stopwords.txt
(过滤无意义词汇)中文字体:如
SimHei.ttf
(避免词云中显示乱码)自定义形状图片(可选):比如
mask.png
(词云填充成特定形状)
二、完整代码示例
1. 代码框架
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from collections import Counter
# 1. 读取文本文件
with open("text.txt", "r", encoding="utf-8") as f:
text = f.read()
# 2. 中文分词(使用 Jieba)
words = jieba.cut(text)
# 3. 过滤停用词
with open("stopwords.txt", "r", encoding="utf-8") as f:
stopwords = set([line.strip() for line in f])
filtered_words = [word for word in words if word not in stopwords and len(word) > 1]
# 4. 统计词频
word_freq = Counter(filtered_words)
# 5. 生成词云
wc = WordCloud(
font_path="SimHei.ttf", # 指定中文字体路径
background_color="white", # 背景颜色
max_words=200, # 最多显示的词数
width=800,
height=600
)
wc.generate_from_frequencies(word_freq)
# 6. 显示词云
plt.imshow(wc, interpolation="bilinear")
plt.axis("off") # 隐藏坐标轴
plt.show()
# 7. 保存词云(可选)
wc.to_file("wordcloud.png")
三、关键步骤详解
1. 分词与停用词过滤
分词:
jieba.cut(text)
返回一个生成器,需转换为列表(如list(words)
)。停用词:从文件中加载常见停用词(如“的”、“了”、“是”),并过滤掉长度≤1的字符。
2. 词频统计
使用
Counter
统计词语出现次数,生成{词语: 频次}
的字典。
3. 词云参数配置
font_path
:必须指定中文字体路径,否则词云会显示方框。
max_words
:控制词云中显示的最大词汇量。其他参数:
background_color
(背景颜色)、width
/height
(尺寸)。
4. 自定义形状词云
如果要让词云填充特定形状(如中国地图),需以下步骤:
from PIL import Image
import numpy as np
# 加载形状图片(需黑白对比明显)
mask = np.array(Image.open("mask.png"))
# 修改 WordCloud 参数
wc = WordCloud(
font_path="SimHei.ttf",
mask=mask, # 指定形状
background_color="white",
contour_color="blue" # 轮廓颜色
)
四、示例数据
1. text.txt
内容示例
自然语言处理是人工智能领域的重要方向之一。通过分析文本数据,我们可以从中提取有价值的信息。中文分词是处理中文文本的基础步骤,而词云则能直观展示文本中的关键词。
2. stopwords.txt
停用词表
的
了
是
在
和
可以
我们
而
五、运行结果
生成的词云可能如下(高频词更大更明显):
自然语言处理 人工智能 文本数据
中文分词 基础步骤 词云
关键词 分析 提取
六、常见问题与解决
乱码问题:确保
font_path
指向正确的中文字体文件(如SimHei.ttf
)。分词不准确:
添加自定义词典:
jieba.load_userdict("user_dict.txt")
调整分词模式:
jieba.cut(text, cut_all=False)
(精确模式)
词云形状不清晰:确保
mask
图片背景为纯白(RGB: 255,255,255)。