什么是 jieba?
jieba 的名字来源于中文词语“结巴”,形象地表达了中文词语之间没有天然空格,需要“结结巴巴”地切分的特点。

它的核心功能就是将连续的汉字序列(句子)切分成一个个有意义的词语。
- 输入:
"我爱北京天安门" - 输出:
["我", "爱", "北京", "天安门"]
jieba 之所以强大,是因为它结合了多种分词算法:
- 基于前缀词典的高效词图扫描:能够生成所有可能的切分路径。
- 采用 Viterbi 算法:找出基于词频(从语料库中统计)的最优路径。
- 对新词发现的支持:通过用户自定义词典和 TF-IDF 算法,能识别出词典中没有的新词。
如何安装和使用 jieba?
1 安装
jieba 可以通过 Python 的包管理工具 pip 轻松安装,打开你的终端或命令行工具,运行:
pip install jieba
2 基本使用
jieba 提供了三种主要的分词模式,以及一些辅助功能。

A. 精确模式
这是最常用、最精确的模式,它试图将句子最精确地切开,适合文本分析。
import jieba
sentence = "我爱北京天安门"
# 使用 jieba.cut 进行分词,返回的是一个生成器
seg_list = jieba.cut(sentence)
# 将生成器转换为列表并打印
print("精确模式:", "/".join(list(seg_list)))
输出:
精确模式: 我/爱/北京/天安门
B. 全模式
全模式会把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义问题。
import jieba
sentence = "我爱北京天安门"
# 使用 jieba.cut(..., cut_all=True) 开启全模式
seg_list = jieba.cut(sentence, cut_all=True)
print("全模式:", "/".join(list(seg_list)))
输出:
全模式: 我/爱/北京/天安门/北京/天安/天安门
可以看到,"北京" 和 "天安门" 被重复识别了。
C. 搜索引擎模式
在精确模式的基础上,对长词再次进行切分,提高召回率,适用于搜索引擎构建倒排索引的场景。
import jieba
sentence = "小明毕业于计算机科学系,之后在百度工作。"
# 使用 jieba.cut_for_search
seg_list = jieba.cut_for_search(sentence)
print("搜索引擎模式:", "/".join(list(seg_list)))
输出:
搜索引擎模式: 小明/毕业/于/计算机/科学/科学系/系/,/之后/在/百度/工作/。
可以看到,“计算机科学系”被切分成了“计算机/科学/科学系”。
jieba 的高级功能
1 添加自定义词典
当 jieba 无法正确识别一个新词(如人名、公司名、专业术语)时,你可以通过添加自定义词典来提高分词的准确率。
动态添加
import jieba
# 假设 "自然语言处理" 是一个新词,默认可能被错误切分
print("默认分词:", jieba.lcut("自然语言处理是人工智能的重要分支"))
# 添加新词,格式为 "词语 词频 词性(可选)"
# 词频越高,越容易被选为独立词
jieba.add_word("自然语言处理", freq=1000)
print("添加词典后:", jieba.lcut("自然语言处理是人工智能的重要分支"))
输出:
默认分词: ['自然', '语言', '处理', '是', '人工智能', '的', '重要', '分支']
添加词典后: ['自然语言处理', '是', '人工智能', '的', '重要', '分支']
从文件加载词典
创建一个名为 my_dict.txt 的文件,内容如下:
云计算 1000 n
深度学习 1000 n
然后在 Python 代码中加载它:
import jieba
# 加载自定义词典文件
jieba.load_userdict("my_dict.txt")
sentence = "云计算和深度学习是热门技术。"
print("加载自定义词典后:", jieba.lcut(sentence))
输出:
加载自定义词典后: ['云计算', '和', '深度学习', '是', '热门', '技术', '。']
2 获取词性标注
jieba 可以结合 jieba.posseg 模块进行词性标注,这对于理解句子结构非常有用。
import jieba.posseg as pseg
sentence = "我爱北京天安门"
words = pseg.cut(sentence)
for word, flag in words:
print(f"{word} -> {flag}")
输出:
我 -> r
爱 -> v
北京 -> ns
天安门 -> ns
常见的词性标记包括:
n: 名词v: 动词ns: 地名nr: 人名a: 形容词d: 副词m: 数词
3 关键词提取
jieba 提供了基于 TF-IDF 和 TextRank 算法的关键词提取功能。
A. 基于 TF-IDF 算法
from jieba import analyse
# 示例文本
text = "人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。" \
"该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。"
# 提取关键词,参数为文本和返回关键词数量
keywords = analyse.extract_tags(text, topK=5)
print("TF-IDF关键词提取:", keywords)
B. 基于 TextRank 算法
from jieba import analyse
text = "同上..."
# 提取关键词
keywords = analyse.textrank(text, topK=5)
print("TextRank关键词提取:", keywords)
完整代码示例
下面是一个综合运用 jieba 各种功能的示例:
import jieba
import jieba.posseg as pseg
from jieba import analyse
# --- 1. 基本分词 ---
print("--- 1. 基本分词 ---")
sentence1 = "Python是一门非常受欢迎的编程语言,广泛应用于数据科学和人工智能领域。"
print("精确模式:", jieba.lcut(sentence1))
print("搜索引擎模式:", jieba.lcut_for_search(sentence1))
# --- 2. 自定义词典 ---
print("\n--- 2. 自定义词典 ---")
# 添加一个新词
jieba.add_word("数据科学", freq=2000)
print("添加'数据科学'后:", jieba.lcut(sentence1))
# --- 3. 词性标注 ---
print("\n--- 3. 词性标注 ---")
words = pseg.cut(sentence1)
print("词语/词性:")
for word, flag in words:
print(f"{word}/{flag}", end=" ")
print("\n")
# --- 4. 关键词提取 ---
print("\n--- 4. 关键词提取 ---"
long_text = """
自然语言处理是人工智能领域中的一个重要方向,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
自然语言处理是一门融语言学、计算机科学、数学于一体的科学,这一领域的研究将涉及自然语言,即人们日常使用的语言,
所以它与语言学的研究有着密切的联系,但又有重要的区别,自然语言处理并不是一般地研究自然语言,
而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统,因而它是计算机科学的一部分。
"""
# TF-IDF
tfidf_keywords = analyse.extract_tags(long_text, topK=5)
print("TF-IDF 关键词:", tfidf_keywords)
# TextRank
textrank_keywords = analyse.textrank(long_text, topK=5)
print("TextRank 关键词:", textrank_keywords)
# --- 5. 并行分词 (提高效率) ---
print("\n--- 5. 并行分词 ---")
# 需要先初始化
jieba.enable_parallel(4) # 开启4进程并行分词模式
# 对大文本进行分词
large_text = "Python " * 1000000 # 模拟一个大文本
# %timeit 是一个魔法命令,用于测量代码执行时间
%timeit jieba.lcut(large_text)
| 功能 | 函数/方法 | 描述 |
|---|---|---|
| 分词 | jieba.cut() |
精确模式分词,返回生成器 |
jieba.cut(cut_all=True) |
全模式分词 | |
jieba.cut_for_search() |
搜索引擎模式分词 | |
jieba.lcut() |
直接返回列表,更常用 | |
| 自定义词典 | jieba.add_word() |
动态添加词语 |
jieba.load_userdict() |
从文件加载词典 | |
jieba.suggest_freq() |
调整词频,可以强制/禁止某个词被切分 | |
| 词性标注 | jieba.posseg.cut() |
返回词语和词性组成的pair对象 |
| 关键词提取 | jieba.analyse.extract_tags() |
TF-IDF算法 |
jieba.analyse.textrank() |
TextRank算法 | |
| 并行分词 | jieba.enable_parallel() |
开启多进程并行分词,大幅提升速度 |
jieba 是处理中文文本的必备利器,从简单的词语切分到复杂的NLP任务,它都能提供坚实的基础,希望这份详细的介绍能帮助你快速上手并熟练使用它!
