【编程课堂】jieba-中文分词利器

简介: 在之前的文章【编程课堂】词云 wordcloud 中,我们曾使用过 jieba 库,当时并没有深入讲解,所以本次将其单独列出来详细讲解。

0、前言

在之前的文章【编程课堂】词云 wordcloud 中,我们曾使用过 jieba 库,当时并没有深入讲解,所以本次将其单独列出来详细讲解。


jieba库是进行中文分词的利器,根据文档描述,具有以下特点:


  1. 支持三种分词模式:
  • 精确模式,试图将句子最精确地切开,适合文本分析;
  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
  1. 支持繁体分词
  2. 支持自定义词典

本文立足实际需求,提取出部分常用的功能作为讲解,内容包括:


  • 分词
  • 提取关键词
  • 搜索词汇位置


1、分词


中文分词是 jieba 库的核心,其下包括常用的 cut()cut_for_search() 函数。


cut() 函数传入待分词的字符串,返回一个可迭代的生成器,可使用 for 循环提取或者 list 转为列表形式。


import jieba
string = '今天天气特别好,很开心'
result = jieba.cut(string)
print(list(result))


结果:


['今天天气', '特别', '好', ',', '很', '开心']


cut() 函数默认采用精确模式,使用全模式需修改 cut_all 参数为 True


代码如下:


result = jieba.cut(string,cut_all=True)


结果为:


['今天', '今天天气', '天天', '天气', '特别', '好', '', '', '很', '开心']


cut_for_search() 分词函数采用搜索引擎模式,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细,通俗来说就是尽可能多的将字符串分割为有效的词汇。


示例:


string = '今天天气'res = jieba.cut(string)
res2 = jieba.cut_for_search(string)
print('使用cut:',list(res))
print('使用cut_for_search:',list(res2))


结果:


使用cut: ['今天天气']
使用cut_for_search: ['今天', '天天', '天气', '今天天气']


由于采取了不同的分词策略,所以最后的结果也不一样,使用哪个需要根据应用场景来选择。


2、提取词汇


在处理词汇时,常常我们会提取出现频率比较高的关键词,jieba.analyse.extract_tags()具有此功能,它接受 4 个参数


  • sentence 为待提取的文本
  • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight 为是否一并返回关键词权重值,默认值为 False
  • allowPOS 仅包括指定词性的词,默认值为空,即不筛选


我们以西游记为例,提取出权重占比最高的前20个词汇,代码如下:


from jieba.analyse 
import extract_tags
with open('西游记.txt','r',errors='ignore')as f:
    data = f.read()
res = extract_tags(data)
print(res)


结果如下:


['行者', '八戒', '师父', '三藏', '唐僧', '大圣', 
'沙僧', '妖精', '菩萨', '和尚', '那怪', '那里', 
'长老', '呆子', '徒弟', '怎么', '不知', '老孙', '国王', '一个']


修改 topK = 10 得到:


['行者', '八戒', '师父', '三藏', '唐僧',
 '大圣', '沙僧', '妖精', '菩萨', '和尚']


修改 withWeight = True 得到:


[('行者', 0.14971032916840787), ('八戒', 0.0684495682590684),
 ('师父', 0.06131338130166949), ('三藏', 0.05296939997015923), 
 ('唐僧', 0.034778382561747076), ('大圣', 0.032424843415734234), 
 ('沙僧', 0.03158331000220929), ('妖精', 0.027699530179843303), 
 ('菩萨', 0.02576333341504996), ('和尚', 0.02426762372832522)]


jieba 只能返回词汇的权重,而不能返回该词出现的频率,所以在一些特定的应用场景下,比如生成词云图,需要频数时,使用 jieba.cut() 和 collections 下的 Counter 解决起来更方便,关于 Counter参考:【Counter】


3、搜索词汇位置


jieba 库也包含了定位词汇位置的功能,jieba.tokenize() 可以实现此功能,该函数接收字符串,返回一个生成器,包含所有分词结果以及始末位置,基本用法如下:


import jieba
string = '今天天气特别好,很开心'
result = jieba.tokenize(string)
print(list(result))


结果如下:


[('今天天气', 0, 4), ('特别', 4, 6), ('好', 6, 7),
 (',', 7, 8), ('很', 8, 9), ('开心', 9, 11)]


如果我们只是找到某个特定的词汇在文中的位置,拿之前的西游记文本为例,我们去寻找词汇 “行者” 第一次出现的位置


with open('西游记.txt','r',errors='ignore')as f:
    data = f.read()
result = jieba.tokenize(data)
for i in result:
    if '行者' in i:
        print(i)
        break


结果:


('行者', 8593, 8595)


如此,就能很方便的找到特定词汇在文章中出现的位置。


4、小结


以上就是 jieba 库的常用的方法,该库还包括词性标注、并行分词、命令行分词、添加字典等等功能。

更详细的内容参考官方文档:https://github.com/fxsjy/jieba

对该库的算法感兴趣的同学可参考

jieba分词的基本思路:

https://segmentfault.com/a/1190000004061791

对Python中文分词模块结巴分词算法过程的理解和分析:http://blog.csdn.net/rav009/article/details/12196623


近期文章推荐阅读:

喏,你们要的 PyCharm 快速上手指南

给伸手党的福利:Python 新手引导

只学2个月编程能写出什么代码?他们表示:You can you code!

如何用100行Python代码做出魔性声控游戏“八分音符酱”

数据分析:当赵雷唱民谣时他唱些什么?

一行代码扫出“敬业福”

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现

相关文章
|
机器学习/深度学习 自然语言处理 算法
文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)
文本分析-使用jieba库进行中文分词和去除停用词(附案例实战)
9693 0
hutool 验证是否为身份证号码(支持18位、15位和港澳台的10位)
hutool 验证是否为身份证号码(支持18位、15位和港澳台的10位)
|
自然语言处理 搜索推荐 Python
中文文本处理高手指南:从零到高手掌握Python中jieba库
中文文本处理高手指南:从零到高手掌握Python中jieba库
767 0
|
存储 安全 数据安全/隐私保护
深入探索Android与iOS的隐私保护机制:一场没有硝烟的较量####
本文深度剖析了Android与iOS两大移动操作系统在用户隐私保护方面的策略与实践,揭示两者在设计理念、技术实现及用户体验上的异同。通过对比分析,旨在为读者提供一个全面而深入的视角,理解两大平台如何在保障用户隐私的同时,实现功能的丰富与便捷。本文不涉及具体产品推荐或品牌偏好,仅从技术角度出发,探讨隐私保护的现状与挑战。 ####
|
存储 前端开发 JavaScript
vue+elementui+mysql实现个人博客系统
vue+elementui+mysql实现个人博客系统
|
SQL 数据库管理
SQL语句中WITH语句的使用
SQL语句中WITH语句的使用
1191 0
|
数据可视化 物联网 PyTorch
通义千问7B模型开源,魔搭最佳实践来了
通义千问开源!阿里云开源通义千问70亿参数模型,包括通用模型Qwen-7B-Base和对话模型Qwen-7B-Chat,两款模型均已上线ModelScope魔搭社区,开源、免费、可商用,欢迎大家来体验。
|
Java jenkins API
使用Java进行跨平台开发的技巧
使用Java进行跨平台开发的技巧
|
存储 Java 数据库
java 中的VO,PO,DTO,DO对象
经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析。 得出的主要结论是:在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于数据库中存储的数据(数据表),DTO对应于除二者之外需要进行传递的数据。
26182 0
|
人工智能
姿态识别+康复训练矫正+代码+部署(AI 健身教练来分析深蹲等姿态)-2
姿态识别+康复训练矫正+代码+部署(AI 健身教练来分析深蹲等姿态)-2