# jieba 分词 & 文本语料分析 & Python 内置函数笔记

一、jieba 分词

1. 三种分词模式(颗粒度:精确<搜索引擎<全模式)

表格

模式 API 特点 使用场景
精确模式 jieba.lcut() 文本切分合理,无多余碎片、无重复,颗粒度最小 日常最常用,普通文本分词
搜索引擎模式 jieba.cut_for_search() 切分更碎,会拆分部分复合词,少量重复 搜索引擎检索,提高召回率
全模式 jieba.lcut(sentence, cut_all=True) 切分最碎,产生大量碎片,重复较多 早期文本匹配,一般少用

💡原理:搜索引擎 / 全模式把词切碎,用户输入不规范搜索词时,可以匹配更多关键词,提升召回率;实际开发优先用精确模式;搜索、召回场景再考虑另外两种。

2. 繁体支持

  • jieba 原生支持繁体中文,无需额外配置,直接传入繁体字符串即可正常分词。

3. 自定义词典

  1. 词典文件格式(每行一条)词语 [词频] [词性]

词频、词性为可选项,可以只写词语。

  1. 加载词典

python

运行

arduino 复制代码
jieba.load_userdict("data/userdictionary.txt")
  1. 作用:把专有名词、领域词汇强制作为整体,不被分词拆开,适合业务专有名词。

4. 词性标注 posseg

  1. 模块:jieba.posseg
  2. 使用:posseg.lcut(句子)
  3. 效果:分词同时返回每个词语的词性(名词、动词等)
  4. 用途:特征工程,统计各类词性占比,作为文本特征输入模型。

二、文本语料分析(NLP 数据探索)

目的:在模型训练前了解数据集,规避数据问题。

1. 核心三件事

  1. 查看标签分布(是否均衡)

    • 手段:统计标签占比、画柱状图
    • 作用:指导选择损失函数、评估指标
    • 经验标准:1:2、1:3 可认为均衡;比例大于等于 1:5 视为类别不均衡。
  2. 统计句子 / 序列长度分布

    • 手段:绘制直方图(句子长度属于连续变量)
    • 作用:确定模型max_seq_len最大截断长度,例:根据分布选择 500。
  3. 脏数据检测

    • 脏数据类型:乱码、无效内容、重复文本
    • 现实情况:网络爬取数据集重复文本非常多;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) # 统计每个词出现次数

五、易错点 & 面试小总结

  1. jieba 三种模式:精确模式日常首选;搜索引擎 / 全模式为了提高召回率。
  2. 自定义词典:load_userdict,词频词性可选。
  3. 语料分析:离散用柱状图,连续(句子长度)用直方图。
  4. zip 以最短序列截断;*做解包。
  5. map、chain 可以被列表推导式替代;zip 基础 Python 没有替代。
  6. 大模型数据集处理重点:重复数据去重。
相关推荐
翻山越岭的少年1 小时前
用控制信号理解状态变化:基于控制感知域对抗网络的变工况故障诊断
算法
longlongzihan1 小时前
从LeetCode 19. 删除链表的倒数第 N 个结点深入理解“哨兵节点”
c++·算法·leetcode·链表
Gigavision1 小时前
CAS(ME)²数据集 感知图卷积网络算法 CAS(ME)²数据集下载
网络·算法
杜 硕2 小时前
快速排序02
算法·排序算法
careathers2 小时前
【数据结构】二叉树拓展
数据结构·算法
java_nnnn2 小时前
LeetCode刷题滑动窗口(长度最小的子数组)
算法·leetcode·职场和发展
@atweiwei2 小时前
训练 AI 大模型系列之 LoRA:不动模型本体,靠一条低秩旁路改专长(附完整手算算例)
人工智能·算法·ai·语言模型·rag
yi0112 小时前
DAY27: LeetCode 110. 平衡二叉树 | 在递归中判断是否平衡
人工智能·笔记·python·算法·leetcode·二叉树·递归
9624562 小时前
餐饮 SaaS 优惠券系统架构演进(七)营销定价引擎设计:活动、会员价、优惠券、买赠如何在同一 PriceQuote 中可解释地组合
java·运维·算法