当前位置: 首页 > news >正文

jieba 库 3 种分词模式 + 自定义词典,从原理到实战

一、jieba 库原理分析

1. 什么是中文分词?

分词是将连续的汉字序列,按照一定规则重新组合成词语序列的过程。

  • 英文单词天然用空格分隔,中文无天然分隔符,必须通过分词工具切分。
  • 词语是理解语意的基本单元,模型训练、文本分析必须先分词。

2. jieba 分词核心原理

jieba 分词基于词典匹配 + 概率优化实现:

  1. 词典匹配:内置dict.txt词典,遍历句子时匹配所有可能成词的字符组合。
  2. 概率优化:通过 ** 隐马尔可夫模型(HMM)** 计算不同分词结果的概率,选择概率最大的分词方案,保证更符合人类语言习惯。

注意:jieba 分词并非 100% 准确,遇到生僻词或专业术语时,可通过自定义词典优化。


二、jieba 库源码解析

1. 核心文件结构

通过pip show jieba获取安装目录后,核心文件如下:

文件 / 文件夹作用
__init__.py包含核心类Tokenizer,对外暴露分词接口
analyse/实现分词算法、关键词提取等核心逻辑
lac_small/用于创建词法分析模型和数据读取器
finalseg/完成分词后处理的相关代码
__main__.py提供命令行调用 jieba 库的功能
dict.txt保存所有词语的核心词典文件

2. 核心类:Tokenizer

Tokenizer是 jieba 库的核心类,封装了所有分词相关方法,关键方法如下:

  • __init__(self):初始化分词器,加载默认词典。
  • cut(self, sentence, cut_all=False, HMM=True):精确模式分词,返回生成器对象
  • cut_for_search(self, sentence, HMM=True):搜索引擎模式分词,返回生成器对象。
  • lcut(self, *args):精确模式分词,直接返回列表类型cut()的封装)。
  • lcut_for_search(self, *args):搜索引擎模式分词,直接返回列表类型。
  • load_userdict(self, f):加载用户自定义词典,解决专业词识别问题。

三、jieba 库的三种分词模式(教材 8.7.3)

本文统一使用测试文本:我们在学习Python办公自动化

1. 精确模式(默认,最常用)

定义:对句子进行最精确的切分,无冗余、无重复,是文本分析的首选模式。语法格式

jieba.cut(sentence, cut_all=False, HMM=True, use_paddle=False)

参数说明

  • sentence:需要分词的中文字符串。
  • cut_all=False:指定使用精确模式(True为全模式)。
  • HMM=True:是否使用隐马尔可夫模型优化分词结果。

示例代码

import jieba s = '我们在学习Python办公自动化' result = jieba.cut(sentence=s) print(result) print(list(result))

运行结果

<generator object Tokenizer.cut at 0x...> ['我们', '在', '学习', 'Python', '办公', '自动化']

注意:cut()方法返回的是生成器对象,需用list()转换为列表才能查看具体分词结果。


2. 全模式

定义:将句子中所有可能成词的组合都切分出来,会产生大量冗余词汇,适合理解词语构成,不适合实际文本分析。语法格式

jieba.cut(sentence, cut_all=True)

示例代码

import jieba content = "我们在学习Python办公自动化" result = jieba.lcut(content, cut_all=True) print(result)

运行结果

['我们', '在', '学习', 'Python', '办公', '自动', '自动化']

3. 搜索引擎模式

定义:在精确模式基础上,对长粒度的词再次切分,提高关键词匹配召回率,专门适配搜索引擎、检索场景。语法格式

jieba.cut_for_search(sentence, HMM=True)

示例代码

import jieba content = "我们在学习Python办公自动化" result = jieba.lcut_for_search(content) print(result)

运行结果

['我们', '在', '学习', 'Python', '办公', '自动', '自动化', '办公自动化']

四、自定义词典实战(扩展)

1. 为什么需要自定义词典?

jieba 默认词典无法识别专业术语、行业新词等,如 “办公自动化” 默认会拆分为 “办公”“自动化”,若需将其作为整体分词,可通过自定义词典实现。

2. 词典格式

创建userdict.txt文件,每行格式为:词 词频(可选) 词性(可选)

办公自动化 8 n Python 10 nz 学习 3 v

3. 加载自定义词典

import jieba sentence = '我们在学习Python办公自动化' # 未加载自定义词典 res1 = jieba.lcut(sentence) print("未加载词典:", res1) # 加载自定义词典 jieba.load_userdict("./userdict.txt") res2 = jieba.lcut(sentence) print("使用自定义词典:", res2)

效果对比

  • 未加载:['我们', '在', '学习', 'Python', '办公', '自动化']
  • 已加载:['我们', '在', '学习', 'Python', '办公自动化']

五、词性标注与命名实体识别(NER)

1. 词性标注(POS)

import jieba.posseg as pseg content = "我们在学习Python办公自动化" words = pseg.lcut(content) for word, flag in words: print(f"{word}\t{flag}")

运行结果

我们 r 在 p 学习 v Python nz 办公 n 自动化 n

2. 命名实体识别(NER)

定义:从文本中识别人名、地名、机构名等专有名词。实现:结合词性标注,可识别专业名词(如Python)、普通名词(如办公自动化),更精准的 NER 需通过模型训练实现。


六、三种分词模式对比总结

模式特点适用场景
精确模式精准、无冗余文本分析、词频统计
全模式所有可能成词,冗余多理解词语结构
搜索引擎模式精确 + 长词再拆分搜索、关键词匹配

七、完整可运行代码(作业版)

import jieba import jieba.posseg as pseg # 统一测试文本 content = "我们在学习Python办公自动化" # 1. 精确模式 print("=== 精确模式 ===") print(jieba.lcut(content)) # 2. 全模式 print("\n=== 全模式 ===") print(jieba.lcut(content, cut_all=True)) # 3. 搜索引擎模式 print("\n=== 搜索引擎模式 ===") print(jieba.lcut_for_search(content)) # 4. 自定义词典 print("\n=== 自定义词典分词 ===") jieba.load_userdict("./userdict.txt") print(jieba.lcut(content)) # 5. 词性标注 print("\n=== 词性标注 ===") words = pseg.lcut(content) for w, f in words: print(w, "\t", f)
http://www.jsqmd.com/news/460318/

相关文章:

  • Ansys Lumerical 2020 R2.4安装与破解全流程(附环境变量配置详解)
  • 数学建模论文易错点TOP10:为什么你的格式总被扣分?(附正确示例)
  • ESP32-C5-MINI-1工程化可靠性控制:湿敏、静电、回流与应力全链路指南
  • Visio 2010科学图形包安装避坑指南:手把手教你解决MSI解压失败问题
  • 实战演练:如何利用SQLMap快速挖掘银行储物柜系统的CVE-2023-0562漏洞(附详细步骤)
  • Spring AI MCP Server断联问题终极解决指南:从版本升级到Tomcat配置
  • 高效办公必备:Windows与Office快捷键全解析
  • ESP8684超低功耗双模SoC:架构、功耗与安全全栈解析
  • 将AIGlasses_for_navigation集成到ComfyUI工作流:可视化AI导航应用搭建
  • MFC项目重命名实战:从复制到调试的完整避坑指南(VS2019版)
  • OWASP Threat Dragon核心功能解析:让威胁建模不再复杂
  • 软件工程开课博客:我的现状、经验与学期目标
  • 从零到一:TurtleBot4与ROS2 Humble仿真环境搭建实战
  • 终极解决方案:graceful-response如何实现全局异常处理与自定义错误码
  • 数字电路设计和仿真
  • 音色克隆实战:用Fish Speech 1.5制作专属AI语音分身
  • 高德地图逆地理编码实战:从经纬度坐标到精准地址的转换指南
  • vivado2024与vcs2023、verdi2023联合仿真尝试
  • googlesearch:Python实现Google搜索的终极指南
  • 从‘笨小猴‘到‘飞碟验证‘:用C++字符串实战解锁竞赛题套路
  • Linux与数据库
  • Springboot 使用EasyExcel导出含图片并设置样式的Excel文件
  • 18. 基于CW32F030C8T6的GTIM1 PWM呼吸灯实现详解
  • RapidPages完全指南:从安装到部署的一站式前端开发解决方案
  • RMBG-2.0镜像免配置价值:节省新员工环境搭建时间达90%
  • python---包,库,模块
  • java8-java17新特性总结
  • SUNFLOWER MATCH LAB C语言基础集成:嵌入式设备图像预处理
  • zzzzzzzzzz
  • Web制作网站