一、jieba 分词
1. 三种分词模式(颗粒度:精确<搜索引擎<全模式)
表格
| 模式 | API | 特点 | 使用场景 |
|---|---|---|---|
| 精确模式 | jieba.lcut() |
文本切分合理,无多余碎片、无重复,颗粒度最小 | 日常最常用,普通文本分词 |
| 搜索引擎模式 | jieba.cut_for_search() |
切分更碎,会拆分部分复合词,少量重复 | 搜索引擎检索,提高召回率 |
| 全模式 | jieba.lcut(sentence, cut_all=True) |
切分最碎,产生大量碎片,重复较多 | 早期文本匹配,一般少用 |
💡原理:搜索引擎 / 全模式把词切碎,用户输入不规范搜索词时,可以匹配更多关键词,提升召回率;实际开发优先用精确模式;搜索、召回场景再考虑另外两种。
2. 繁体支持
- jieba 原生支持繁体中文,无需额外配置,直接传入繁体字符串即可正常分词。
3. 自定义词典
- 词典文件格式(每行一条)
词语 [词频] [词性]
词频、词性为可选项,可以只写词语。
- 加载词典
python
运行
arduino
jieba.load_userdict("data/userdictionary.txt")
- 作用:把专有名词、领域词汇强制作为整体,不被分词拆开,适合业务专有名词。
4. 词性标注 posseg
- 模块:
jieba.posseg - 使用:
posseg.lcut(句子) - 效果:分词同时返回每个词语的词性(名词、动词等)
- 用途:特征工程,统计各类词性占比,作为文本特征输入模型。
二、文本语料分析(NLP 数据探索)
目的:在模型训练前了解数据集,规避数据问题。
1. 核心三件事
-
查看标签分布(是否均衡)
- 手段:统计标签占比、画柱状图
- 作用:指导选择损失函数、评估指标
- 经验标准:1:2、1:3 可认为均衡;比例大于等于 1:5 视为类别不均衡。
-
统计句子 / 序列长度分布
- 手段:绘制直方图(句子长度属于连续变量)
- 作用:确定模型
max_seq_len最大截断长度,例:根据分布选择 500。
-
脏数据检测
- 脏数据类型:乱码、无效内容、重复文本
- 现实情况:网络爬取数据集重复文本非常多;OpenAI、DeepSeek 等大模型都要做大规模去重。
2. 图表区分
表格
| 图表 | 适用数据 | 特征 |
|---|---|---|
| 柱状图 | 离散变量 | 柱子互相隔开,柱子顺序可以调换;例:标签 0/1 样本数量 |
| 直方图 | 连续变量 | 柱子紧密相连,区间连续;例:句子长度分布 |
| 散点图 | 不适合看大规模分布 | 点容易重叠扎堆;优点:快速识别异常极值 |
三、Python 高频函数:map /zip/itertools.chain
重要结论:
zip无原生替代;map、chain可以用循环 / 列表推导式替代。
1. map () 映射
- 作用:对序列中每一个元素批量执行同一个函数,类似数组矢量化操作。
- 返回:生成器,必须套
list()才能查看结果。 - 可替代:for 循环 / 列表推导式。
python
运行
python
def add2(x):
return x+2
res = list(map(add2, [1,2,3]))
# [3,4,5]
2. zip () 拉链⭐重点(无原生替代)
- 功能:把多个序列按位置索引配对打包成元组;实现行列转换。
- 规则:多个输入序列长度不一致,以最短序列长度为准,多余直接舍弃。
*解包:去掉外层容器括号,把容器内元素拆开,等价于手动传入多个参数。
python
运行
css
a = [1,2,3]
b = [4,5,6]
list(zip(a,b))
# [(1,4), (2,5), (3,6)]
3. itertools.chain () 序列拼接
- 导入:
from itertools import chain - 功能:多个序列首尾拼接,把多个可迭代对象合并成一个;用于嵌套列表展平(捋平) 。
- 可替代:嵌套列表推导式、双重 for 循环。
python
运行
css
list(chain([1,2],[3,4]))
# [1,2,3,4]
四、综合实战:多条文本批量分词 + 展平词列表
场景:输入一批句子,完成批量分词,再把嵌套分词结果展平,拿到全部单词。
方式 1 map + chain
python
运行
ini
import jieba
from itertools import chain
texts = ["我爱北京天安门", "传智教育是一家上市公司"]
# 1.批量分词,得到嵌套列表 [[词1,词2...], [词a,词b...]]
words_list = list(map(jieba.lcut, texts))
# 2.展平嵌套列表,拿到全部单词
all_words = list(chain(*words_list))
方式 2 列表推导式(不用 map、chain)
python
运行
ini
# 批量分词
words_list = [jieba.lcut(s) for s in texts]
# 展平
all_words = [word for sent in words_list for word in sent]
后续:词频统计
python
运行
ini
from collections import Counter
word_count = Counter(all_words) # 统计每个词出现次数
五、易错点 & 面试小总结
- jieba 三种模式:精确模式日常首选;搜索引擎 / 全模式为了提高召回率。
- 自定义词典:
load_userdict,词频词性可选。 - 语料分析:离散用柱状图,连续(句子长度)用直方图。
- zip 以最短序列截断;
*做解包。 - map、chain 可以被列表推导式替代;zip 基础 Python 没有替代。
- 大模型数据集处理重点:重复数据去重。