中文分词与文本分析实战指南

作者:艾光远日期:2026/1/27

1. 引言:中文分词的重要性与挑战

中文作为一门独特的语言,其词语之间没有像英文那样的空格分隔,这使得中文文本处理面临着特殊的挑战。分词是中文自然语言处理(NLP)的基础环节,直接影响后续的文本分析、情感分析、信息检索等任务的质量。

jieba作为Python中最受欢迎的中文分词工具之一,以其高效、准确和易用性赢得了广泛认可。它不仅支持多种分词模式,还提供了丰富的扩展功能,如词性标注、关键词提取等,成为了中文NLP领域的必备工具。

2. 环境准备与基础配置

2.1. 导入必要模块

在开始使用jieba之前,我们首先进行基本的环境配置。通过导入警告控制模块,可以避免不必要的干扰信息输出:

1import warnings 
2warnings.filterwarnings("ignore")
3
4import jieba
5from collections.abc import Iterable
6jieba.setLogLevel(20)  # 设置jieba日志级别,减少输出干扰

2.2. 扩展功能导入

jieba还提供了词性标注和关键词提取等高级功能:

1import jieba.posseg as pseg  # 词性标注
2import jieba.analyse as analyse  # 关键词提取

3. 核心分词模式详解

jieba提供了三种不同的分词模式,以适应不同的应用场景。

3.1. 精确模式(默认模式)

精确模式是最常用的分词方式,它尝试将句子最精确地切分,适合文本分析任务:

1sentence = "我来到北京清华大学"
2seg_list_exact = jieba.cut(sentence, cut_all=False)
3print("精确模式:", "/".join(seg_list_exact))
4# 输出: 我/来到/北京/清华大学

适用场景:精确模式特别适合需要准确分词结果的场景,如文本挖掘、情感分析和内容分类等。

性能特点:精确模式在准确性和速度之间取得了良好平衡,是大多数应用场景的首选。

1seg_list_all = jieba.cut(sentence, cut_all=True)
2print("全模式:", "/".join(seg_list_all))
3# 输出: 我/来到/北京/清华/清华大学/华大/大学

3.2. 全模式(搜索引擎模式)

全模式会将句子中所有可能的词语都扫描出来,速度非常快,但可能存在歧义:

1seg_list_all = jieba.cut(sentence, cut_all=True)
2print("全模式:", "/".join(seg_list_all))
3# 输出: 我/来到/北京/清华/清华大学/华大/大学

适用场景:全模式适用于对召回率要求较高的场景,如搜索引擎索引建立或文本去重。

3.3. 搜索引擎模式

这种模式在精确模式的基础上,对长词语再次进行切分,提高召回率,适用于搜索引擎分词:

1seg_list_search = jieba.cut_for_search(sentence)
2print("搜索引擎模式:", "/ ".join(seg_list_search))
3# 输出: 我/来到/北京/清华/清华大学/华大/大学

4. 高级功能应用

4.1. 自定义词典功能

jieba的分词效果很大程度上依赖于词典的质量。对于专业术语、新词或特定领域的词汇,我们可以通过自定义词典来提高分词准确率:

1text = "今天我试驾了问界M9,它的鸿蒙座舱体验真不错"
2
3# 默认分词效果
4print("默认分词:", "/ ".join(jieba.cut(text)))
5
6# 添加自定义词汇
7jieba.add_word("问界M9")  # 添加车型号
8jieba.add_word("鸿蒙座舱")  # 添加座舱类型
9print("添加自定义词后的分词:", "/ ".join(jieba.cut(text)))
10# 输出: 今天/我/试驾了/问界M9/,/它/的/鸿蒙座舱/体验/真不错

通过自定义词典,可以显著提高特定领域文本的分词准确性,特别是对于新词、专业术语和品牌名称等。

4.2. 停用词过滤

在文本分析中,停用词(如"的"、"了"、"我"等)通常不携带重要信息,过滤这些词可以提高分析效率:

1stop_words = {'的', '了', '我', '它', '是', '也', '都'}
2
3def filter_stopwords(words, stopwords_set):
4    """
5    过滤停用词
6    :param words: 分词后的单词列表
7    :param stopwords_set: 停用词集合
8    :return: 过滤后的单词列表
9    """
10    return [word for word in words if word not in stopwords_set]
11
12# 应用停用词过滤
13words = jieba.cut("我的天啊,这部电影的特效真是太棒了")
14filtered_words = filter_stopwords(words, stop_words)
15print("过滤停用词后:", list(filtered_words))
16# 输出: ['我的', '天啊', ',', '这部', '电影', '特效', '真是', '太棒了']

4.3. 关键词提取

关键词提取是文本挖掘中的重要任务,jieba提供了两种主流的算法:TF-IDF和TextRank。

4.3.1. TF-IDF算法

TF-IDF(词频-逆文档频率)通过统计词语在文档中的出现频率和在语料库中的逆文档频率来评估词语的重要性:

1document = """
2人工智能(AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
3AI是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。
4该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
5"""
6
7# 基于TF-IDF的关键词提取
8keywords_tfidf = analyse.extract_tags(document, topK=5, withWeight=True)
9print("基于TF-IDF的关键词提取:", keywords_tfidf)
10# 输出: [('智能', 0.6365), ('AI', 0.5313), ('图像识别', 0.2657), ...]

4.3.2. TextRank算法

TextRank算法基于PageRank的思想,通过词语之间的共现关系构建图模型,迭代计算每个词语的重要性:

1# 基于TextRank的关键词提取
2keywords_textrank = analyse.textrank(document, topK=5, withWeight=True)
3print("基于TextRank的关键词提取:", keywords_textrank)
4# 输出: [('智能', 1.0), ('研究', 0.4905), ('技术', 0.4828), ...]

5. 实际应用场景与最佳实践

5.1. 选择合适的分词模式

  • 文本分析任务:推荐使用精确模式,保证分词的准确性
  • 搜索引擎索引:建议使用搜索引擎模式,提高召回率
  • 实时性要求高的场景:可考虑全模式,但需注意歧义问题

5.2. 词典优化策略

  • 持续更新自定义词典:随着新词、网络用语的出现,需要定期更新词典
  • 领域专用词典:针对不同领域(如医疗、金融、法律)建立专业词典
  • 用户词典优先级:jieba支持加载用户词典,且优先级高于默认词典

词典管理技巧:建立系统化的词典管理流程,包括新词发现、验证和更新机制。

5.3. 性能优化建议

  • 并行分词:对于大量文本,可以使用jieba.enable_parallel()开启并行分词
  • 惰性加载:首次加载词典可能会有延迟,建议在程序初始化时提前加载
  • 内存管理:对于内存敏感的环境,可以调整词典的加载方式

6. 总结与展望

jieba作为一个成熟的中文分词工具,为中文NLP任务提供了坚实的基础支持。通过本文介绍的多种功能,开发者可以根据具体需求灵活选择合适的方法:

  • 基础分词:三种模式满足不同场景需求
  • 词典扩展:支持自定义词汇,适应专业领域
  • 文本处理:停用词过滤提高分析效率
  • 关键信息提取:TF-IDF和TextRank算法各有优势

随着自然语言处理技术的不断发展,中文分词技术也在持续进步。未来,结合深度学习的分词方法可能会提供更高的准确率和更好的上下文理解能力。然而,jieba作为经典的基于规则和统计的方法,在大多数场景下仍然表现出色,是中文NLP开发者的可靠选择。

在实际应用中,建议根据具体任务需求,将jieba与其他NLP工具(如hanlp、pyltp等)结合使用,发挥各自优势,构建更加强大的中文文本处理系统。

7. 代码示例

1# 导入警告模块,用于控制获告信息的显示
2import warnings 
3# 忽略所有警告信息
4warnings.filterwarnings("ignore")
5
6# 导入中文分词模块jieba
7import jieba 
8from collections.abc import Iterable
9# 设置jieba日志级别为20,避免输出警告信息
10jieba.setLogLevel(20)
11
12# 导入词性标注模块jieba.posseg
13import jieba.posseg as pseg
14# 导入关键词提取模块jieba.analyse
15import jieba.analyse as analyse
16
17# 演示jieba分词的三种模式
18sentence = "我来到北京清华大学"
19# 精确模式(默认模式,适合文本分析)
20seg_list_exact = jieba.cut(sentence,cut_all = False)
21print("精确模式:", "/".join(seg_list_exact))
22# 精确模式: 我/来到/北京/清华大学
23
24# 全模式(搜索引擎模式,适合搜索引擎)
25seg_list_all = jieba.cut(sentence,cut_all = True)
26print("全模式:", "/".join(seg_list_all))
27# 全模式: 我/来到/北京/清华/清华大学/华大/大学
28
29# 搜索引擎模式(在精确模式基础上对长词再次切分)
30seg_list_search = jieba.cut_for_search(sentence)
31print("搜索引擎模式:", "/ ".join(seg_list_search))
32# 搜索引擎模式: 我/来到/北京/清华/清华大学/华大/大学
33
34# 自定义词典功能演示
35text = "今天我试驾了问界M9,它的鸿蒙座舱体验真不错"
36print("默认分词:","/ ".join(jieba.cut(text)))
37
38# 添加自定义词(专业术语、新词等)
39jieba.add_word("问界M9")  # 添加车型号
40jieba.add_word("鸿蒙座舱") # 添加座舱类型
41print("添加自定义词后的分词:","/ ".join(jieba.cut(text)))
42# 添加自定义词后的分词: 今天/我/试驾了/问界M9/,/它/的/鸿蒙座舱/体验/真不错
43
44# 停用词功能演示
45stop_words = {'的','了','我','它','是','也','都'}
46
47def filter_stopwords(words,stopwords_set):  # pyright: ignore[reportUnknownParameterType, reportMissingParameterType]
48    """
49    过滤停用词
50    :param words: 分词后的单词列表
51    :param stopwords_set: 停用词集合
52    :return: 过滤后的单词列表
53    """
54    return [word for word in words if word not in stopwords_set]  # pyright: ignore[reportUnknownVariableType]
55
56
57words = jieba.cut("我的天啊,这部电影的特效真是太棒了")
58filtered_words = filter_stopwords(words,stop_words)
59print("过滤停用词后:",list(filtered_words))
60# 过滤停用词后: ['我的', '天啊', ',', '这部', '电影', '特效', '真是', '太棒了']
61
62# 关键词提取演示
63document = """
64人工智能(AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
65AI是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。
66该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
67"""
68
69# 基于TF-IDF的关键词提取
70# topK=5表示提取前5个关键词
71# withWeight=True表示返回关键词的权重值
72keywords_tfidf = analyse.extract_tags(document, topK=5, withWeight=True)
73print("基于TF-IDF的关键词提取:",keywords_tfidf)
74# 基于TF-IDF的关键词提取: [('智能', 0.6364585148773334), ('AI', 0.5313230001288889), ('图像识别', 0.26566150006444444), ('自然语言', 0.23188759442666668), ('专家系统', 0.23054038060888887)]
75
76# 基于TextRank的关键词提取
77# topK=5表示提取前5个关键词
78# withWeight=True表示返回关键词的权重值
79keywords_textrank = analyse.textrank(document, topK=5, withWeight=True)
80print("基于TextRank的关键词提取:",keywords_textrank)
81# 基于TextRank的关键词提取: [('智能', 1.0), ('研究', 0.4904607646783309), ('技术', 0.48275054334804185), ('相似', 0.3875379601145878), ('语言', 0.38619517645643014)]
82

中文分词与文本分析实战指南》 是转载文章,点击查看原文


相关推荐


2026前端面试题及答案
阿芯爱编程2026/1/18

2026前端面试题及答案 HTML/CSS 部分 1. 什么是盒模型?标准盒模型和IE盒模型的区别是什么? 答案: 盒模型是CSS中用于布局的基本概念,每个元素都被表示为一个矩形盒子,由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。 区别: 标准盒模型(W3C盒子模型):width和height只包含内容(content) IE盒模型(怪异模式盒子模型):width和height包含内容(content)、内边距(padding)和边框(b


后端线上发布计划模板
uzong2026/1/10

敬畏每一行代码,敬畏每一次变更。 本模板旨在通过结构化、可验证、可回溯的方式,降低发布风险,保障系统稳定。 一、📅 发布基本信息 项目内容发布名称示例:用户中心 v2.3.0 上线发布时间2026-01-15 01:00 – 02:30发布负责人xxx协同人员xxx发布类型✅ 功能上线 / 🔁 配置变更 / 🐞 紧急修复 / ⚙️ 架构调整是否灰度发布是 / 否(若“是”,说明策略:如 5% → 20% → 100%) 二、


权限与访问控制
weixin79893765432...2026/1/2

目录 一、概念二、权限与访问控制的「能力全景图」三、前端视角的「权限控制分层模型」(核心)1、登录态层(Authentication State)2、路由层(Page Access Control)3、菜单层(Navigation Control)4、组件 / 操作层(Action Control) 四、前端权限系统的“典型数据流”五、权限模型的三种常见设计(前端必须懂)1、RBAC(基于角色)2、PBAC(基于权限点)3、ABAC(基于属性/规则) 六、重点「权限与访问控制」业务剖析


智谱年末王炸:GLM-4.7开源,这可能是给程序员最好的圣诞礼物
墨风如雪2025/12/23

2025年的年底,本以为AI圈的大战会随着节日季的到来暂时偃旗息鼓,没想到智谱AI在这个节点扔下了一枚重磅炸弹。 就在12月23日,他们正式发布并开源了GLM-4.7。这不仅仅是一次常规的版本号迭代,更像是一次针对开发者痛点的精准爆破。如果你还在为开源模型写不出能跑的代码而头疼,或者还在心疼闭源API高昂的账单,那么GLM-4.7可能正是你在等的那个破局者。 这不是参数堆砌,是实打实的“智力”升级 先说最直观的感受。过去我们用开源模型写代码,往往是“一看顿悟,一跑报错”。但这次GLM-4.7在


【鸿蒙开发案例篇】鸿蒙6.0的pdfService与pdfViewManager终极爆破
威哥爱编程2025/12/15

大家好,我是V哥。 兄弟们抄家伙!今天给大家分享用鸿蒙6.0的PDF Kit撕碎文档开发防线,全程高能代码扫射,专治各种PDF开发不服!以下基于HarmonyOS 6.0(API 21)的ArkTS实战,弹药已上膛👇 联系V哥获取 鸿蒙学习资料 💣 第一弹:pdfService——文档底层爆破术 核心能力:文档加载/编辑/转换 import { pdfService } from '@kit.PDFKit'; import { BusinessError } from '@kit.Ba


Boost搜索引擎
该吃吃.2025/12/7

目录 ​编辑 1.项目相关背景 2.搜索引擎的相关宏观原理 3.搜索引擎技术栈和项目环境 4.正倒排索引-搜索引擎具体原理 5.数据去标签与数据清洗模块-Parser 6.建立索引的模块-Index 7.搜索引擎模块-Searcher 8.http-server模块 9.前端模块 gitee源码:新增加boost搜索引擎源码 · cd86251 · XL/gaichihci的学习仓库 - Gitee.com 我们编写完前端网页如下图所示:(只需要服务器连接上,浏览器客


【c++中间件】RabbitMQ介绍 && AMQP-CPP库的使用 && 二次封装
利刃大大2025/11/28

文章目录 Ⅰ. 安装 RabbitMQRabbitMQ 服务安装与使用安装 RabbitMQ 的 C++ 客户端库安装 AMQP-CPP Ⅱ. RabbitMQ 的介绍RabbitMQ 服务与客户端的通信原理简单通信流程 Ⅲ. AMQP-CPP 库的简单使用一、介绍二、使用三、常用类与接口介绍Channel 类libev 使用样例 Ⅳ. 二次封装测试代码 Ⅰ. 安装 RabbitMQ RabbitMQ 服务安装与使用 sudo apt i


JavaScript的数据类型 —— Boolean类型
橘朵2026/2/6

Boolean(布尔值)类型有两个字面值:true和false。 这两个布尔值不同于数值,因此 true 不等于 1,false 不等于 0。 虽然布尔值只有两个,但所有其他类型的值都有相应布尔值的等价形式,可以调用特定的Boolean() 转型函数: let message = "Hello world!"; let messageAsBoolean = Boolean(message); Boolean()转型函数可以在任意类型的数据上调用,而且始终返回一个布尔值。 下面是不同类型与布尔


Flutter 正在计划提供 Packaged AI Assets 的支持,让你的包/插件可以更好被 AI 理解和选择
恋猫de小郭2026/2/14

如何让开源项目能够持续获得资金支持,2025 - 2026 的答案肯定是紧跟 AI 。 2025 年 Dart/Flutter MCP 和 Flutter GenUI 的出现,无疑让 Flutter 在 AI 上刷新了存在感,特别是谷歌核心项目 NotebookLM 在 Flutter 上的成功,也让 Flutter 在 AI 应用场景证明了可行性,这从第三方 appfigures 提供的数据也可以有明显体现: 数据是 appfigures 分析数百万个 iOS 和 Android 应用和游


LeetCode 762.二进制表示中质数个计算置位:位运算(mask O(1)判断)
Tisfy2026/2/22

【LetMeFly】762.二进制表示中质数个计算置位:位运算(mask O(1)判断) 力扣题目链接:https://leetcode.cn/problems/prime-number-of-set-bits-in-binary-representation/ 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。 计算置位位数 就是二进制表示中 1 的个数。 例如, 21 的二进制表示 10101 有 3

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客