jieba 分词 - 用户自定义词典
1 课程概览
本课介绍 jieba 分词的用户自定义词典功能,讲解词典文件格式(词语、词频、词性),说明词频作为权重影响分词结果的机制,并展示 jieba 词性对照表。通过自定义词典,可以让 jieba 将特定词语(如公司名"传智教育")切分到一起。
2 核心概念与定义
- 用户自定义词典(User Dictionary):用户可单独创建的词典文件,用于指定 jieba 分词时需要切到一起的词语。
- 词频(Frequency):词典中的权重值,数值越大 jieba 切词时越参考该词。若有冲突,优先选择词频高的词语。注意:不是文件中出现的次数,而是用户赋予的权重。
- 词性(Word Type):标注词语的词性(名词、动词等),如
n表示名词,nz表示其他专名,nt表示机构团体名。 - 词性对照表:jieba 内部的词性标记对照表,用于查询词语在 jieba 中的词性分类。
3 模型与算法详解
用户自定义词典格式
词典文件每行格式:
词语 [词频] [词性]
| 字段 | 是否必选 | 说明 |
|---|---|---|
| 词语(word) | ✅ 必选 | 希望切到一起的词 |
| 词频(frequency) | ❌ 可选 | 权重值,越大越优先;不知道可不写 |
| 词性(word_type) | ❌ 可选 | 名词(n)、动词等 |
词典文件示例
黑马程序员 5 n
传智教育 5 n
人工智能 5 n
学习 5 v
上市 5 v
词频的作用机制
- 词频越大 → jieba 切词时越参考该词
- 若有多个可选词冲突 → 优先选择词频高的
- 实际开发中不知道词频 → 只写词语即可
jieba 词性对照表(部分)
| 标记 | 词性 | 说明 |
|---|---|---|
| n | 名词 | 普通名词 |
| nr | 人名 | 人名 |
| ns | 地名 | 地名 |
| nt | 机构团体名 | 机构名 |
| nz | 其他专名 | 如"人工智能" |
| v | 动词 | 动词 |
| a | 形容词 | 形容词 |
| m | 数量词 | 数量词 |
| q | 量词 | 量词 |
| p | 介词 | 介词 |
| c | 连词 | 连词 |
| d | 副词 | 副词 |
| e | 叹词 | 叹词 |
| o | 拟声词 | 拟声词 |
⚠️ 不需要背诵,用到时查表即可。
4 数学原理与推导
本课无数学推导。
5 代码示例
import jieba
# 1. 不使用自定义词典的分词结果
text = "传智教育是一家上市公司"
result_without = list(jieba.cut(text, cut_all=False))
print("不使用自定义词典:", result_without)
# 输出:['传', '智', '教育', '是', '一家', '上市', '公司']
# 2. 加载用户自定义词典
jieba.load_userdict("data/user_dict.txt")
# 3. 使用自定义词典后的分词结果
result_with = list(jieba.cut(text, cut_all=False))
print("使用自定义词典:", result_with)
# 输出:['传智教育', '是', '一家', '上市', '公司']
词典文件 data/user_dict.txt
传智教育 5 n
黑马程序员 5 n
人工智能 5 n
6 重难点与易错提醒
- ❗重点:词典格式为
词语 词频 词性,词语必选,词频和词性可选。 - ⚠️易错:词频不是文件中出现的次数,而是用户赋予的权重值。
- ⚠️易错:词性字段不是"类型",而是"词性"(名词、动词等)。
- 💡深入理解:词频越大,jieba 切词时越参考该词;冲突时优先选择词频高的词。
7 课堂问答精选
Q1:为什么"传智教育"会被 jieba 切开?如何解决?
A:jieba 默认词典中没有"传智教育"这个词,所以会被切分为"传""智""教育"。解决方法是创建用户自定义词典文件,在文件中写上"传智教育"及词频和词性,然后通过 jieba.load_userdict() 加载。
Q2:词频是什么意思?不知道怎么写怎么办?
A:词频是权重值,不是文件中出现的次数。数值越大,jieba 切词时越参考该词。若有冲突,优先选择词频高的词。实际开发中不知道词频可不写,只写词语即可。
Q3:词性对照表需要背诵吗?
A:不需要。词性标记太多,背不完。用到时查表即可,只需了解常见的几个(如 n 名词、v 动词、a 形容词等)。
8 本课小结
- 用户自定义词典格式:
词语 [词频] [词性],词语必选,其余可选。 - 词频是权重值,越大越优先;不是出现次数。
- 通过
jieba.load_userdict()加载自定义词典。 - 词性对照表无需背诵,用时查表即可。
9 延伸思考
- 自定义词典的词频如何确定最优值?
- 当多个自定义词语有重叠时,词频如何影响分词结果?