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

Python:Jieba 库常用函数及应用

在中文自然语言处理(Natural Language Processing,NLP)中,文本通常需要先进行分词(Word Segmentation),即将连续的汉字序列划分为具有语义的词语单位。例如:

我喜欢自然语言处理

可以分词为:

我 / 喜欢 / 自然语言处理

英文通常以空格作为天然词边界,而中文文本通常没有显式的词语边界,因此需要通过词典匹配或统计模型进行分词。

Jieba 是 Python 中最常用的中文分词库之一,具有以下特点:

• 支持精确模式、全模式和搜索引擎模式

• 支持自定义词典

• 支持关键词提取(TF-IDF、TextRank)

• 支持词性标注

• 基于前缀词典 + DAG + 动态规划实现分词,并结合 HMM 进行新词识别

安装 Jieba:

pip install jieba

导入库:

import jieba

一、分词函数

分词是 Jieba 的核心功能。

cut()

进行中文分词,返回一个生成器对象。

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

参数说明:

• sentence:输入字符串

• cut_all:是否使用全模式

• HMM:是否使用 Hidden Markov Model(隐马尔可夫模型)识别新词

返回:

一个生成器(generator),逐个返回分词结果。

示例:

text = "我来到北京清华大学"words = jieba.cut(text)print(list(words))

输出示例:

['我', '来到', '北京', '清华大学']

说明:默认使用精确模式,适用于一般文本分析。

lcut()

与 cut() 相同,但直接返回列表(list)。

jieba.lcut(sentence, cut_all=False, HMM=True)

示例:

jieba.lcut("我爱自然语言处理")

输出:

['我', '爱', '自然语言', '处理']

说明:lcut() 是 cut() 的便捷版本。

tokenize()

获取分词结果及其在原字符串中的位置。

jieba.tokenize(sentence, mode='default', HMM=True)

参数说明:

• sentence:输入字符串

• mode:分词模式

'default':默认模式'search':搜索引擎模式

• HMM:是否启用 HMM 新词识别

返回:

返回一个可迭代对象(iterator),其中每个元素通常包含:词语、起始位置、结束位置等信息。

示例:

text = "我喜欢自然语言处理" for item in jieba.tokenize(text): print(item)

输出示例:

('我', 0, 1)('喜欢', 1, 3)('自然语言', 3, 7)('处理', 7, 9)

说明:tokenize() 不仅给出分词结果,还给出每个词在原文本中的位置区间,因此特别适合构建搜索索引、文本高亮显示、词语定位以及信息检索系统等场景。

二、分词模式

Jieba 支持三种主要分词模式。

1、精确模式(默认)

最常用模式,尽量准确地切分句子。

jieba.cut(text)

示例:

text = "湖南省长沙市湘江大桥" print(list(jieba.cut(text)))

输出:

['湖南省', '长沙市', '湘江', '大桥']

2、全模式

扫描出所有可能的词语。

jieba.cut(text, cut_all=True)

示例:

print(list(jieba.cut("湖南省长沙市湘江大桥", cut_all=True)))

输出示例:

['湖南', '湖南省', '省长', '长沙', '长沙市', '沙市', '湘江', '大桥']

说明:全模式速度快,但存在大量冗余词。

3、搜索引擎模式

用于搜索引擎分词,对长词进行再次切分。

jieba.cut_for_search()

进行中文分词(用于搜索引擎),返回一个生成器对象。

jieba.lcut_for_search()

与 jieba.cut_for_search() 相同,但直接返回列表(list)

jieba.cut_for_search(sentence)jieba.lcut_for_search(sentence)

示例:

jieba.lcut_for_search("小明毕业于中国科学院计算所")

输出示例:

['小明', '毕业', '于', '中国', '科学', '学院', '科学院', '中国科学院', '计算', '计算所']

说明:适合构建搜索索引。

三、词典管理函数

Jieba 支持自定义词典,以改善分词效果。

add_word()

向词典中添加新词。

jieba.add_word(word, freq=None, tag=None)

参数说明:

• word:新词

• freq:词频(可选)

• tag:词性(可选)

示例:

jieba.add_word("自然语言处理")jieba.lcut("我喜欢自然语言处理")

输出:

['我', '喜欢', '自然语言处理']

del_word()

删除词典中的词。

jieba.del_word(word)

示例:

jieba.del_word("自然语言处理")text = jieba.lcut("我喜欢自然语言处理")

load_userdict()

加载自定义词典。

jieba.load_userdict(file_name)

词典格式:

自然语言处理 10 n机器学习 10 n深度学习 10 n

其中:

自然语言处理:表示需要加入词典的词条。10:表示该词在词典中的词频(frequency)。词频越高,表示越容易被识别为一个完整词。n:表示该词的词性(Part of Speech)。词频和词性字段均为可选。

常见词性包括:

词性

含义

n

名词

v

动词

a

形容词

r

代词

m

数词

ns

地名

nr

人名

nt

机构名

示例:

jieba.load_userdict("user_dict.txt")

说明:自定义词典常用于专业领域文本、专有名词或产品名称等。

suggest_freq()

动态调整词频,使某些词语更容易被切分,或避免被错误切分。

jieba.suggest_freq(segment, tune=False)

参数说明:

• segment:可以是一个字符串,也可以是一个词语元组

• tune:是否立即调整词频

tune = False:仅返回建议词频tune = True:同时将该建议词频应用到当前分词器

返回:

返回建议使用的词频值。

示例 1:查看建议词频

freq = jieba.suggest_freq(("中", "将"), tune=False)print(freq)

示例 2:调整分词效果

text = "如果放到post中将出错。"print(jieba.lcut(text)) jieba.suggest_freq(("中", "将"), tune=True)print(jieba.lcut(text))

输出示例:

['如果', '放到', 'post', '中将', '出错', '。']['如果', '放到', 'post', '中', '将', '出错', '。']

说明:suggest_freq() 适合做局部调优;若需要长期维护专业词汇,通常仍应优先使用自定义词典。

四、关键词提取

Jieba 提供两种关键词提取算法:

• TF-IDF

• TextRank

需要导入子模块:

import jieba.analyse

extract_tags()

基于 TF-IDF(Term Frequency – Inverse Document Frequency,词频 – 逆文档频率)的关键词提取。

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False)

参数说明:

• sentence:输入文本

• topK:返回关键词数量

• withWeight:是否返回权重

示例:

text = """自然语言处理是人工智能的重要领域,广泛应用于机器翻译、文本分类和信息检索。"""jieba.analyse.extract_tags(text, topK=5)

输出示例:

['自然语言处理', '人工智能', '机器翻译', '文本分类', '信息检索']

说明:

一个词如果同时满足:

• 在当前文档中出现很多次

• 在整个语料库中很少出现

那么这个词就很可能是该文档的关键词。

textrank()

基于 TextRank 的关键词提取。

jieba.analyse.textrank(sentence, topK=20, withWeight=False)

示例:

jieba.analyse.textrank(text, topK=5)

输出示例:

['人工智能', '文本', '分类', '信息检索', '处理']

说明:TextRank 不是依赖词频或语料库统计,而是基于图排序算法,根据词语共现关系构建图并计算节点重要性,更适合新闻文本以及较长文本。

五、词性标注

Jieba 提供词性标注功能。

导入模块:

import jieba.posseg as pseg

posseg.cut()

进行分词并返回词性。

pseg.cut(sentence)

示例:

words = pseg.cut("我爱自然语言处理") for w in words: print(w.word, w.flag)

输出示例:

我 r爱 v自然语言 n处理 v

六、并行分词

Jieba 还提供并行分词支持,将分词任务分配到多个进程中执行,以提高处理大量文本时的效率。

enable_parallel()

启用并行分词。

jieba.enable_parallel(processnum=None)

参数说明:

• processnum:进程数。若省略,则通常使用默认值。

示例:

jieba.enable_parallel(4) words = jieba.lcut("人工智能正在改变世界,机器学习和深度学习正在快速发展。")print(words)

jieba.disable_parallel()

关闭并行分词。

jieba.disable_parallel()

说明:

并行分词依赖 Python 多进程机制,在 Linux 或 macOS 环境中通常效果更明显;在 Windows 环境下使用时可能受到一定限制。

七、中文分词应用示例

在实际的中文 NLP 项目中,文本预处理通常包括以下步骤:

1、中文分词(jieba)

2、停用词过滤

3、标点过滤

4、词形规范化

5、词频统计或向量化

这些步骤构成了中文文本分析的基础流程,广泛应用于:

• 文本分类

• 情感分析

• 关键词提取

• 信息检索

• 搜索引擎

通过 Jieba 提供的分词能力结合简单的文本预处理,可以快速构建中文文本分析的基础处理管道。

示例代码:

import jiebafrom collections import Counterimport re # 示例文本(中文文本分析对象)text = """人工智能正在改变世界。人工智能的发展推动了机器学习和深度学习的发展。人工智能技术已经广泛应用于自动驾驶、语音识别和自然语言处理等领域。""" # 使用 Jieba 进行中文分词# lcut() 返回列表形式的分词结果words = jieba.lcut(text) # 停用词集合(Stop Words)# 这些词通常不具有重要语义,在文本分析中可以过滤掉stopwords = {"的", "了", "和", "是", "在", "于", "等"} # 词形规范化字典(Normalization)# 用于统一不同表达方式,例如 AI → 人工智能normalize = { "AI": "人工智能", "NLP": "自然语言处理"} # 用于保存清洗后的词语clean_words = [] # 对分词结果进行逐个处理for w in words: # 如果是停用词,则跳过 if w in stopwords: continue # 使用正则表达式过滤非中文词 # \u4e00-\u9fff 表示常见中文字符范围 if not re.fullmatch(r"[\u4e00-\u9fff]+", w): continue # 词形规范化: # 如果词在 normalize 字典中存在,则替换为规范词 # 否则保持原词不变 w = normalize.get(w, w) # 将处理后的词加入结果列表 clean_words.append(w) # 使用 Counter 统计词频freq = Counter(clean_words) # most_common(n) 返回出现频率最高的 n 个词及其频次print(freq.most_common(10))

📘 小结

Jieba 是 Python 中常用的中文分词工具,提供了分词、搜索模式分词、位置标注、词典管理、关键词提取、词性标注与并行分词等功能。通过 cut()、lcut()、tokenize()、add_word()、suggest_freq() 等常用 API,可以较方便地构建中文文本分析、信息检索与自然语言处理的基础处理流程。

“点赞有美意,赞赏是鼓励”

http://www.jsqmd.com/news/462351/

相关文章:

  • Asian Beauty Z-Image Turbo实战案例:为独立设计师生成100+套国风服装概念图
  • Ollama平台translategemma-12b-it实战:10分钟搭建个人翻译工作流
  • SPIRAN ART SUMMONER图像生成效果展示:基于YOLOv8的目标检测融合创作
  • 盘点滨州青石材口碑好的企业,在杭州合肥等地有哪些推荐? - 工业推荐榜
  • GTE中文文本嵌入模型实操手册:向量缓存机制提升QPS实践
  • AIVideo从部署到导出:一站式AI视频制作完整教程
  • 使用TensorRT加速PETRV2-BEV模型推理的完整指南
  • 2026年好用的质量稳定的锰粉资深厂商有哪些,青冲新材值得关注 - mypinpai
  • 横评后发现!冠绝行业的降AI率网站 —— 千笔·降AIGC助手
  • Ikonli图标库深度对比:FontAwesome vs. MaterialDesign在JavaFX中的性能实测
  • GTE文本向量开箱即用:5分钟搞定中文文本分类与情感分析
  • UEFI HII协议深度实战:如何通过FormBrowser2协议动态修改BIOS设置项
  • Fish-Speech-1.5长文本合成技术突破展示
  • 多耦合试验室厂家大集合!快瞅瞅哪些实力超群、能定制还技术杠杠的! - 品牌推荐大师
  • Qwen3-4B Instruct-2507惊艳效果:中文古籍断句+白话翻译+注释生成三合一
  • Lighthouse 99分实战:我是如何用Nginx+WebP+HTTP/2让博客首屏秒开的
  • YOLO X Layout在嵌入式设备上的优化部署方案
  • Windows 11下Masm32安装全攻略:从下载到配置一步到位
  • 智能AI雷达名片系统 多用户SAAS架构+AI访客追踪+百度地图定位,助力企业搭建智能招商平台
  • 2025 年 Linux 内核十大技术创新|年终盘点
  • 通义千问3-VL-Reranker-8B应用场景:海量视频素材库的智能检索助手
  • C++实时系统功能安全开发必踩的5个雷区:从内存泄漏到未定义行为,93%的工控项目正在 silently 失效
  • 空间转录组数据可视化进阶:用Seurat玩转TP53基因的空间表达图谱
  • 上周热点回顾(.-.)
  • 火遍全网的养龙虾到底是什么?详细拆解OpenClaw
  • 护流程,防止因分区缺失导致的数据插入失败;制定紧急情况下的空间清理与扩展预案,确保在磁盘空间耗尽或表空间无法扩展时能够快速响应并恢复 ...
  • Qwen3-TTS在VR场景的3D语音合成技术解析
  • 每天分钟,混剪视频Agent产出条爆款,单月变现位数(喂饭级教程)
  • ccmusic-database/music_genre入门必看:PyTorch DataLoader在音频批处理中的内存优化技巧
  • Wan2.1-UMT5高帧率视频生成挑战:测试其在60FPS下的表现