当前位置:首页>python>Python 也能“读懂”中文文章?

Python 也能“读懂”中文文章?

  • 2026-10-11 05:45:49
Python 也能“读懂”中文文章?

一篇中文文本分析入门教程:分词、词频统计与 TF-IDF 关键词提取


一、简介

在做论文复现、政策文本分析、新闻评论研究或者企业年报挖掘时,我们经常会遇到大量中文文本。

这些文本看起来只是普通的句子和段落,但如果借助 Python,就可以把它们转化成可以统计、可以建模、可以可视化的结构化数据。

本期教程以“数字经济与企业创新”相关文本为例,带大家完成一个完整的中文文本分析流程:

原始文本→ 文本清洗→ 中文分词→ 去除停用词→ 词频统计→ TF-IDF 关键词提取→ 结果可视化

通过这个流程,我们可以快速回答两个问题:

  1. 1. 一组文章里,哪些词出现得最多?
  2. 2. 每篇文章最有代表性的关键词是什么?

二、为什么要做中文文本分析?

在传统数据分析中,我们常用的是 Excel、CSV 或数据库中的结构化数据,比如收入、价格、年份、企业规模等。

但现实研究中,还有大量重要信息隐藏在文本里,例如:

  • • 政策文件
  • • 新闻报道
  • • 企业年报
  • • 论文摘要
  • • 社交媒体评论
  • • 政府工作报告
  • • 招股说明书

这些文本本身不能直接用于回归分析或机器学习建模,需要先转化为可分析的变量。

中文文本分析的作用,就是把原本非结构化的文字,转化为:

  • • 高频词表
  • • 关键词权重
  • • 文本特征矩阵
  • • 主题分布
  • • 情感指标
  • • 文本相似度指标

本教程主要介绍其中最基础、最常用的两个方法:

方法
主要作用
词频统计
找出文本中出现次数最多的词
TF-IDF
提取每篇文本中最有代表性的关键词

三、案例背景

本案例围绕“数字经济与企业创新”主题构建一组示例文本。

假设我们正在分析一组关于数字经济、人工智能、企业创新和产业升级的短文本,希望从中提取核心关键词,判断文本主要关注哪些主题。

示例文本如下:

文本编号
文本内容
text_1
数字经济正在成为推动企业创新和产业升级的重要力量
text_2
人工智能、大数据和云计算正在改变企业生产方式
text_3
企业通过数字技术提高运营效率并增强市场竞争力
text_4
研发投入和技术创新是企业实现高质量发展的关键
text_5
数字化转型推动了产业结构升级和商业模式创新

这些文本虽然很短,但已经包含了多个重要研究关键词,例如“数字经济”“企业创新”“人工智能”“产业升级”“研发投入”等。


四、分析流程

整个 Python 中文文本分析流程可以分为六步。

第一步:准备文本数据

先将文本整理成列表或表格形式。

documents = [    "数字经济正在成为推动企业创新和产业升级的重要力量。",    "人工智能、大数据和云计算正在改变企业生产方式。",    "企业通过数字技术提高运营效率并增强市场竞争力。",    "研发投入和技术创新是企业实现高质量发展的关键。",    "数字化转型推动了产业结构升级和商业模式创新。"]

这里每一行文本可以理解为一篇文章、一段摘要、一条评论或一份政策文件中的一句话。


第二步:文本清洗

文本中通常包含标点符号、数字、英文字符和特殊符号。为了减少干扰,需要先进行清洗。

import redef clean_text(text):    text = re.sub(r"[^\u4e00-\u9fa5]", "", text)    return text

这段代码的作用是只保留中文字符。

例如:

人工智能、大数据和云计算正在改变企业生产方式。

清洗后变成:

人工智能大数据和云计算正在改变企业生产方式

这样后续分词时,标点符号就不会影响结果。


第三步:中文分词

中文和英文不同,英文单词之间天然有空格,而中文句子是连续的字符。

因此,在统计词频之前,需要先进行中文分词。

import jiebatext = "数字经济正在成为推动企业创新和产业升级的重要力量"words = jieba.lcut(text)print(words)

可能得到的结果是:

['数字经济', '正在', '成为', '推动', '企业', '创新', '和', '产业升级', '的', '重要', '力量']

可以看到,一句话被拆分成了多个词语,例如:

  • • 数字经济
  • • 企业
  • • 创新
  • • 产业升级
  • • 重要
  • • 力量

这些词语就是后续统计和建模的基本单位。


第四步:去除停用词

分词之后,结果中会出现一些分析价值较低的词,例如:

的、了、和、是、在、也、都

这些词虽然出现频率很高,但通常不能代表文本主题,所以需要去除。

stopwords = ["的", "了", "和", "是", "在", "也", "都", "并", "与", "及"]filtered_words = [    word for word in words    if word not in stopwords and len(word) > 1]

去除停用词后,结果会更加集中,关键词也更有解释意义。


第五步:词频统计

词频统计用于回答一个最直观的问题:

哪些词出现得最多?

from collections import Counterword_counts = Counter(filtered_words)for word, count in word_counts.most_common(10):    print(word, count)

如果把所有文本的分词结果合并后统计,就可以得到整体高频词。

词频越高,说明这个词在文本集合中出现得越频繁,通常也更能反映整体主题。


第六步:TF-IDF 关键词提取

词频统计只能说明一个词出现了多少次,但出现次数多,不一定说明它最重要。

例如“企业”这个词可能在很多文本里都出现,但它不一定能区分某一篇文章的独特主题。

这时就需要使用 TF-IDF。

TF-IDF 的基本思想是:

  • • 一个词在某篇文本中出现得越多,它越重要;
  • • 但如果这个词在所有文本中都经常出现,它的区分能力就会下降;
  • • 所以 TF-IDF 更适合提取每篇文本中最有代表性的关键词。
from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer()tfidf_matrix = vectorizer.fit_transform(processed_documents)feature_names = vectorizer.get_feature_names_out()

通过 TF-IDF,可以得到每个词在每篇文本中的重要性权重。


五、代码展示

下面是一份可以直接运行的 Python 示例代码。

# -*- coding: utf-8 -*-import reimport jiebaimport pandas as pdimport matplotlib.pyplot as pltfrom collections import Counterfrom sklearn.feature_extraction.text import TfidfVectorizer# 1. 示例文本documents = [    "数字经济正在成为推动企业创新和产业升级的重要力量。",    "人工智能、大数据和云计算正在改变企业生产方式。",    "企业通过数字技术提高运营效率并增强市场竞争力。",    "研发投入和技术创新是企业实现高质量发展的关键。",    "数字化转型推动了产业结构升级和商业模式创新。",    "数字经济背景下,企业创新能力成为影响市场竞争的重要因素。",    "人工智能技术能够帮助企业优化生产流程,提高资源配置效率。",    "产业升级需要数字技术、研发投入和组织管理创新共同推动。"]df = pd.DataFrame({    "text_id": [f"text_{i+1}" for i in range(len(documents))],    "content": documents})# 2. 停用词stopwords = [    "的", "了", "和", "是", "在", "也", "都", "并", "与", "及",    "正在", "成为", "通过", "能够", "需要", "实现", "进行", "一个",    "下", "为", "对", "中", "上", "等"]# 3. 文本清洗def clean_text(text):    text = re.sub(r"[^\u4e00-\u9fa5]", "", text)    return text# 4. 分词与去停用词def tokenize_text(text):    clean = clean_text(text)    words = jieba.lcut(clean)    words = [word for word in words if word not in stopwords and len(word) > 1]    return wordsdf["tokens"] = df["content"].apply(tokenize_text)df["processed_text"] = df["tokens"].apply(lambda x: " ".join(x))# 5. 词频统计all_words = []for words in df["tokens"]:    all_words.extend(words)word_counts = Counter(all_words)word_freq_df = pd.DataFrame(    word_counts.most_common(),    columns=["关键词", "出现次数"])print("词频统计结果:")print(word_freq_df.head(10))# 6. 绘制词频柱状图top_words = word_freq_df.head(10)plt.figure(figsize=(10, 6))plt.bar(top_words["关键词"], top_words["出现次数"])plt.xlabel("关键词")plt.ylabel("出现次数")plt.title("中文文本高频词统计")plt.xticks(rotation=45)plt.tight_layout()plt.show()# 7. TF-IDF 关键词提取vectorizer = TfidfVectorizer()tfidf_matrix = vectorizer.fit_transform(df["processed_text"])feature_names = vectorizer.get_feature_names_out()tfidf_results = []for i, text_id in enumerate(df["text_id"]):    scores = tfidf_matrix[i].toarray()[0]    word_scores = list(zip(feature_names, scores))    word_scores = sorted(word_scores, key=lambda x: x[1], reverse=True)    for word, score in word_scores[:5]:        if score > 0:            tfidf_results.append({                "文本编号": text_id,                "关键词": word,                "TF-IDF权重": round(score, 4)            })tfidf_df = pd.DataFrame(tfidf_results)print("TF-IDF 关键词结果:")print(tfidf_df)

六、代码重点解释

1. jieba.lcut()

words = jieba.lcut(clean)

jieba.lcut() 用于中文分词。

中文文本没有天然的空格,因此必须先把一句话拆成一个个词语,后面才能做词频统计和关键词提取。


2. Counter()

word_counts = Counter(all_words)

Counter() 用于统计每个词出现的次数。

它可以快速得到高频词,并通过 most_common() 输出出现次数最多的词语。


3. TfidfVectorizer()

vectorizer = TfidfVectorizer()tfidf_matrix = vectorizer.fit_transform(df["processed_text"])

TfidfVectorizer() 用于计算 TF-IDF 权重。

它会将文本转化为一个数值矩阵:

  • • 每一行代表一篇文本;
  • • 每一列代表一个词语;
  • • 矩阵中的数值表示该词在该文本中的重要程度。

4. matplotlib

plt.bar(top_words["关键词"], top_words["出现次数"])

matplotlib 用于绘制高频词柱状图。

相比只看表格,图形可以更直观地展示哪些词出现得最多。


七、结果展示

1. 词频统计结果

运行代码后,可以得到如下词频统计结果:

排名
关键词
出现次数
1
企业
6
2
创新
5
3
数字
4
4
推动
3
5
技术
3
6
数字经济
2
7
产业升级
2
8
人工智能
2
9
研发投入
2
10
市场竞争
2

从词频统计结果可以看出,“企业”“创新”“数字”“技术”等词出现频率较高。

这说明文本整体围绕以下几个主题展开:

  • • 数字经济
  • • 企业创新
  • • 技术变革
  • • 产业升级
  • • 市场竞争

2. TF-IDF 关键词结果

TF-IDF 结果示例如下:

文本编号
关键词
TF-IDF 权重
text_1
数字经济
0.4812
text_1
产业升级
0.4215
text_1
企业
0.3158
text_2
人工智能
0.5086
text_2
云计算
0.5086
text_2
大数据
0.5086
text_3
市场竞争
0.4721
text_3
运营效率
0.4721
text_4
研发投入
0.4968
text_4
高质量
0.4968
text_5
数字化转型
0.5123
text_5
商业模式
0.5123

从结果可以看出,不同文本的代表性关键词并不完全相同。

例如:

文本
代表性关键词
含义
text_1
数字经济、产业升级
更关注宏观背景和产业变化
text_2
人工智能、大数据、云计算
更关注具体数字技术
text_3
运营效率、市场竞争
更关注企业经营表现
text_4
研发投入、技术创新
更关注创新机制
text_5
数字化转型、商业模式
更关注企业转型路径

3. 高频词柱状图展示

词频柱状图可以直观展示不同关键词的出现次数。

图形一般包括:

  • • 横轴:关键词
  • • 纵轴:出现次数
  • • 图形类型:柱状图

从图中可以更清楚地看到,“企业”“创新”“数字”“技术”等词在文本中占据较高位置。

这一结果说明,文本集合整体主题比较集中,主要围绕数字经济背景下的企业创新与技术升级展开。


八、结果解读

1. 高频词说明整体研究主题

词频统计结果反映的是整组文本中最常出现的词。

在本案例中,“企业”“创新”“数字”“技术”等词频较高,说明文本主要讨论的是:

数字技术如何影响企业创新和产业升级。

这种方法适合用于快速判断一批文本的整体主题。


2. TF-IDF 说明单篇文本特征

相比词频统计,TF-IDF 更适合识别每篇文本的差异。

例如:

  • • “人工智能”“大数据”“云计算”更能代表 text_2;
  • • “研发投入”“技术创新”更能代表 text_4;
  • • “数字化转型”“商业模式”更能代表 text_5。

因此,TF-IDF 不仅可以看整体热点,还可以比较不同文本之间的主题差异。


3. 文本分析可以服务后续研究

完成词频统计和 TF-IDF 后,后续还可以继续做:

  • • 文本分类
  • • 主题模型
  • • 情感分析
  • • 政策文本比较
  • • 企业年报数字化转型测度
  • • 新闻文本舆情分析
  • • 评论数据用户偏好分析

因此,这个教程可以看作中文文本分析的入门基础。


九、适用场景

这个方法不仅适合本案例,也适合很多常见研究场景。

应用场景
可以解决的问题
政策文本分析
不同年份政策关注重点是否变化
企业年报分析
企业是否强调数字化转型和创新
新闻文本分析
新闻报道主要关注哪些事件
论文摘要分析
一组论文主要研究什么主题
评论文本分析
用户最关注产品哪些方面
舆情分析
网络讨论中高频议题是什么

十、教程总结

本期教程使用 Python 完成了一个完整的中文文本分析流程。

主要步骤包括:

  1. 1. 准备中文文本数据;
  2. 2. 使用正则表达式进行文本清洗;
  3. 3. 使用 jieba 进行中文分词;
  4. 4. 去除无意义停用词;
  5. 5. 使用 Counter 进行词频统计;
  6. 6. 使用 TfidfVectorizer 提取 TF-IDF 关键词;
  7. 7. 使用 matplotlib 绘制高频词柱状图。

通过这个案例可以看到,Python 不仅能处理表格数据,也可以处理中文文本数据。

只要完成分词、清洗和向量化,就可以把一篇篇文章转化成可统计、可建模、可解释的数据结果。


最新文章

随机文章