一文快速上手 Python 中文分词神器 —— jieba 库

一文快速上手 Python 中文分词神器 —— jieba 库

在自然语言处理(NLP)中,中文文本处理的第一步通常是——分词
由于中文没有像英文那样的空格分隔单词,因此我们需要一个智能工具来识别“词语”的边界。

👉 这时候,jieba 就是最常用也最强大的中文分词库之一。

本文将带你快速上手 jieba,从安装到实战,仅需 10 分钟即可掌握核心用法。


文章目录


一、jieba 是什么?

jieba 是一个优秀的中文分词库,名字来源于“结巴”二字。
它基于前缀词典实现高效的词图扫描算法,结合 HMM(隐马尔可夫模型)来识别新词。

📌 简单来说,它能帮你:

  • 🔹 把句子切分成有意义的词语;
  • 🔹 自动识别新词;
  • 🔹 支持关键词提取;
  • 🔹 支持自定义词典。

二、安装 jieba

jieba库地址为GitHub - fxsjy/jieba: 结巴中文分词

使用 pip 一键安装即可:

pip install jieba 

安装完成后,在 Python 中导入:

import jieba 

三、jieba 的三种分词模式

jieba 提供了三种常用分词模式,适用于不同场景。

精确模式(默认)

尽量切分出最精确的词语,适合文本分析。
import jieba text ="我来到北京清华大学" words = jieba.cut(text, cut_all=False)print("精确模式:","/".join(words))

输出:

精确模式: 我/来到/北京/清华大学 

✅ 这种模式是最常用的,也是默认模式。


全模式

找出句子中所有可能的词(会有冗余),速度最快但不精确。
words = jieba.cut("我来到北京清华大学", cut_all=True)print("全模式:","/".join(words))

输出:

全模式: 我/来到/北京/清华/清华大学/华大/大学 

📍 全模式适合搜索引擎分词(即“匹配尽可能多的词”)。


搜索引擎模式

在精确模式的基础上,再次对长词进行细分,适合用于搜索引擎索引。
words = jieba.cut_for_search("小明硕士毕业于中国科学院计算所")print("搜索引擎模式:","/".join(words))

输出:

搜索引擎模式: 小明/硕士/毕业/于/中国/中国科学院/科学/学院/中国科学院计算所/计算/计算所 

✅ 适用于关键词匹配与搜索引擎分词场景。


四、添加自定义词典

有时候,jieba 默认词典可能无法识别你的专有词汇,比如品牌名、地名、人名。

例如:

text ="李小龙是中国功夫之王"print("/".join(jieba.cut(text)))

输出:

李/小龙/是/中国/功夫/之/王 

你可能希望“李小龙”被识别为一个整体。
我们可以通过 自定义词典 来实现。


方法一:动态添加词语

jieba.add_word("李小龙")print("/".join(jieba.cut(text)))

输出:

李小龙/是/中国/功夫/之/王 

方法二:加载外部词典文件

假设你有一个 user_dict.txt 文件:

李小龙 10 nr 中国功夫 5 nz 

加载方法:

jieba.load_userdict("user_dict.txt")

这样你可以批量添加专有名词、品牌词、地名等。


五、关键词提取

jieba 还支持根据 TF-IDF(词频-逆文档频率) 算法提取关键词,非常适合文本分析和摘要生成。

import jieba.analyse text ="人工智能是计算机科学的一个分支,它企图理解智能的实质,并生产出一种新的能以人类智能方式行动的机器。" keywords = jieba.analyse.extract_tags(text, topK=5, withWeight=True)print("关键词提取结果:")for word, weight in keywords:print(f"{word} ({weight:.3f})")

输出示例:

关键词提取结果: 智能 (1.234) 计算机 (0.923) 科学 (0.612) 机器 (0.512) 理解 (0.438) 

📊 这些关键词代表了文本的主要语义。


六、词性标注(Part-of-Speech Tagging)

结合 jieba.posseg 模块可以为每个词标注词性(如名词、动词等)。

import jieba.posseg as pseg words = pseg.cut("我爱自然语言处理")for word, flag in words:print(f"{word} ({flag})")

输出:

我 (r) 爱 (v) 自然语言处理 (n) 

常见词性缩写:

词性含义
n名词
v动词
a形容词
r代词
ns地名
nr人名

七、并行分词(多线程)

当需要处理大规模文本时,jieba 提供了并行分词功能。

jieba.enable_parallel(4)# 使用4个线程 text ="非常长的一段文本..." words = jieba.cut(text) jieba.disable_parallel()

⚠️ 注意:并行分词在 Windows 上可能不稳定,建议在 Linux / macOS 环境使用。


八、完整示例:从句子到词云

import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt text ="我爱自然语言处理,Python让中文分词变得如此简单。"# 分词 words = jieba.cut(text) text_cut =" ".join(words)# 生成词云 wc = WordCloud(font_path="msyh.ttc", width=600, height=400).generate(text_cut) plt.imshow(wc, interpolation="bilinear") plt.axis("off") plt.show()

✅ 输出一张中文词云图,直观展示高频词。


九、jieba 常用 API 速查表

方法作用
jieba.cut(text, cut_all=False)精确模式分词
jieba.cut_for_search(text)搜索引擎模式分词
jieba.add_word(word)动态添加自定义词
jieba.load_userdict(file)加载自定义词典
jieba.analyse.extract_tags(text, topK)提取关键词(TF-IDF)
jieba.posseg.cut(text)词性标注
jieba.enable_parallel(num)启用并行分词

十、总结

功能说明
分词模式精确 / 全模式 / 搜索引擎
自定义词典支持动态和文件加载
关键词提取内置 TF-IDF 算法
词性标注支持词性识别
并行分词提升大文本处理速度

一句话总结:

jieba 是 Python 中文文本处理的首选工具,功能全、上手快、效果好。

Read more

Flutter for OpenHarmony:more 极致算法与数据结构工具集(Dart 官方推荐的高效扩展) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:more 极致算法与数据结构工具集(Dart 官方推荐的高效扩展) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 Flutter 和 Dart 的标准库提供了 List, Map, Set 以及基本的 Math 库。这对于普通 APP 开发够用了。 但是,如果你要开发: * 一个高性能的游戏引擎(需要位运算、四叉树)。 * 一个复杂的数据分析工具(需要统计学算法)。 * 一个缓存系统(需要 LRU 策略)。 * 一个自定义的解析器(需要字符集处理)。 标准库就显得捉襟见肘了。 more 是 Dart 社区中质量极高的一个工具库(作者是 Google 工程师)。它汇集了大量高效的数据结构、数学算法、迭代器扩展和缓存策略。它的座右铭是“更多功能,更少废话”。 对于 OpenHarmony 应用,尤其是涉及高性能计算或复杂逻辑处理的场景,

By Ne0inhk
链表与LinkedList

链表与LinkedList

前言 来啦来啦~ 今天和大家分享链表与LinkedList的内容,结构差不多,如果大家有了顺序表的基础接受到这一部分会更加容易,我们还是集合框架出发,开始吧 一、java集合框架 * Java 集合框架是 Java 中用于存储和操作一组对象的体系,核心分为 Collection(单列集合)和Map(双列集合) 核心接口与分类 * Collection(单列集合) * 是所有单列集合的根接口,定义了集合的基本操作(增删改查、遍历等)。 * 子接口:List(有序可重复)、Set(无序不可重复)、Queue(队列)。 * Map(双列集合) * 存储键值对(Key-Value),Key 唯一、Value 可重复。 * 子接口:SortedMap(键有序)。 * 咱今天就接着看LinkedList. LinkedList 1. 实现的接口 * 实现了List接口(具备列表的增删改查能力); * 实现了Deque接口(

By Ne0inhk
数据结构:双向链表(2)

数据结构:双向链表(2)

目录  前言  一、实现双向链表 1.双向链表查找  2.双向链表在指定位置插入 双向链表在指定位置之后插入 双向链表在指定位置之前插入  3.双向链表指定位置删除 4.总代码展示:(加入了测试代码) 二、顺序表与链表的分析 一、相同点 二、不同点(核心差异) 三、关键结论 三、链表算法题 一、移除链表元素  二、反转链表     总结  前言    上一篇文章讲解了双向链表概念与结构,实现双向链表(双向链表的初始化,双向链表的尾插,双向链表的头插,双向链表的尾删,双向链表的头删)等知识的相关内容,其中实现双向链表其余部分,顺序表与链表的分析,链表算法题为本章节知识的内容。 一、实现双向链表 1.双向链表查找 双向链表的查找操作与单链表类似,但可利用创建一个暂时的指针实现遍历。 函数形式:

By Ne0inhk
LeetCode——双指针(初阶)

LeetCode——双指针(初阶)

文章目录 * 简要介绍 * 对撞指针 * 快慢指针 * 相关例题 * 移动零 * 题目描述 * 实现思路 * 版本一 * 版本二 * 最终版 * 复写零 * 题目描述 * 实现思路 * 版本一 * 版本二 简要介绍 我们的双指针算法是算法题中比较常见的一种算法,常见的双指针实际上是有两种的,一种是对撞指针,一种就是我们的快慢指针。 对撞指针 一般用于我们的顺序结构当中,也叫左右指针。 实现思路: 1、对撞指针就是从序列两端向中间移动。 2、终止条件一般就是两个指针相遇了或是错开了。 快慢指针 这个指针又叫龟兔赛跑算法,就是使用两个移动速度不同的指针在序列上移动。常用于我们的环形链表或是数组中。 实现思路: 1、研究问题是不是有循环往复的现象出现。 2、设置一个快指针和一个慢指针,比如让快指针移动两步,慢指针移动一步。 相关例题 移动零 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组

By Ne0inhk