jieba 分词 - 全模式介绍
1 课程概览
本课演示 jieba 分词的全模式(Full Mode)代码实现,通过复用精确模式代码进行修改,对比全模式与精确模式的分词结果差异,说明全模式适用于关键词提取等对准确性要求不高的场景。
2 核心概念与定义
- 全模式(Full Mode):将句子中所有可以成词的词语都扫描出来,
cut_all=True,速度快但不能消除歧义。 - 关键词提取(Keyword Extraction):全模式的典型应用场景,对分词准确性要求不高。
3 模型与算法详解
全模式特点
- 扫描所有成词:将句子中所有可能的词语都切分出来
- 速度快:不需要像精确模式那样筛选最符合习惯的词
- 不能消除歧义:可能切出不符合用语习惯的词
- 适用场景:关键词提取,不需要严格分词准确性的场景
全模式 vs 精确模式分词结果对比
以"传智教育是一家上市公司"为例:
| 模式 | 分词结果 | 特点 |
|---|---|---|
| 精确模式 | 传智教育 / 是 / 一家 / 上市公司 | 筛选最符合习惯的词 |
| 全模式 | 传 / 智 / 教育 / 是 / 一家 / 上市 / 公司 / 上市公司 | 能拆的全拆出,词更多 |
全模式比精确模式切出的词更多,如"上市公司"会被拆成"上市""公司""上市公司"等多个结果。
4 数学原理与推导
本课无数学推导。
5 代码示例
import jieba
# 定义函数:演示 jieba 全模式分词
def dm02_jieba_full():
# 1. 准备分词内容(与精确模式相同)
content = "传智教育是一家上市公司,旗下有黑马程序员品牌,我是在黑马这里学习人工智能"
# 2. 使用 jieba 进行全模式分词
# cut_all=True 表示全模式
result = jieba.cut(content, cut_all=True)
# 3. 打印结果
# 同样返回生成器,需转换为列表
print("全模式分词结果:", list(result))
# 测试
if __name__ == "__main__":
dm02_jieba_full()
输出示例:
全模式分词结果: ['传', '智', '教育', '是', '一家', '上市', '公司', '上市公司', ',', '旗下', '有', '黑马', '程序员', '品牌', ',', '我', '是', '在', '黑马', '这里', '学习', '人工', '智能', '人工智能']
6 重难点与易错提醒
- ⚠️易错:全模式只需将
cut_all参数从False改为True,其他代码不变。 - ⚠️易错:全模式返回的同样是生成器,打印地址值时不要纠结,结果仍是生成器类型。
- 💡深入理解:编程只有第一次是难的,后续复用只需修改关键参数即可。
- 💡深入理解:全模式切出的词比精确模式多,因为能拆的都拆出来了,但可能产生歧义(如"传"可能被误解为"传球""传奇"等)。
7 课堂问答精选
Q1:全模式和精确模式的代码区别是什么?
A:只需将 jieba.cut() 的 cut_all 参数从 False(精确模式)改为 True(全模式),其余代码完全一致。
Q2:全模式适用于什么场景?
A:适用于关键词提取等对分词准确性要求不高的场景。全模式速度快,能扫描出所有可能的词语,但不能消除歧义。
Q3:为什么全模式切出的词比精确模式多?
A:精确模式会筛选最符合用语习惯的词,而全模式将所有可以成词的词语都扫描出来,不做筛选,因此结果更多。例如"上市公司"在精确模式中是一个词,在全模式中会被拆成"上市""公司""上市公司"等多个结果。
8 本课小结
- 全模式:
cut_all=True,扫描所有成词,速度快但不能消除歧义。 - 适用场景:关键词提取,对准确性要求不高的场景。
- 代码实现:复用精确模式代码,仅将
cut_all改为True。 - 全模式分词结果比精确模式更多,因为能拆的都拆出来了。
9 延伸思考
- 全模式不能消除歧义,在实际项目中如何处理歧义问题?
- 关键词提取场景中,全模式相比精确模式有哪些优势?