0、前言
在之前的文章中,我们曾使用过 jieba 库,当时并没有深入讲解,所以本次将其单独列出来详细讲解。
jieba库是进行中文分词的利器,根据文档描述,具有以下特点:
支持三种分词模式:
支持繁体分词
支持自定义词典
本文立足实际需求,提取出部分常用的功能作为讲解,内容包括:
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 个参数
我们以西游记为例,提取出权重占比最高的前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库,使用jieba.cut()和 collections 下的Counter解决起来更方便,关于Counter参考:【Counter】
3、搜索词汇位置
jieba 库也包含了定位词汇位置的功能,jieba.tokenize()可以实现此功能,该函数接收字符串,返回一个生成器,包含所有分词结果以及始末位置jieba库,基本用法如下:
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 库的常用的方法,该库还包括词性标注、并行分词、命令行分词、添加字典等等功能。
更详细的内容参考官方文档:
对该库的算法感兴趣的同学可参考
jieba分词的基本思路:
对Python中文分词模块结巴分词算法过程的理解和分析:
注册会员查看全部内容……
限时特惠本站每日持续更新海量各大内部创业教程,年会员只要98元,全站资源免费下载
点击查看详情
站长微信:9200327