如何在python中使用jieba中文分词库
本篇文章给大家分享的是有关如何在python中使用jieba中文分词库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1、分词
1.1、CUT函数简介
cut(sentence, cut_all=False, HMM=True)
返回生成器,遍历生成器即可获得分词的结果
lcut(sentence)
返回分词列表
importjieba sentence='我爱自然语言处理' #创建【Tokenizer.cut生成器】对象 generator=jieba.cut(sentence) #遍历生成器,打印分词结果 words='/'.join(generator) print(words)
打印结果
我/爱/自然语言/处理
importjieba print(jieba.lcut('我爱南海中学'))
打印结果
[‘我', ‘爱', ‘南海中学']
1.2、分词模式
精确模式:精确地切开
全模式:所有可能的词语都切出,速度快
搜索引擎模式:在精确模式的基础上,对长词再次切分
importjieba sentence='订单数据分析' print('精准模式:',jieba.lcut(sentence)) print('全模式:',jieba.lcut(sentence,cut_all=True)) print('搜索引擎模式:',jieba.lcut_for_search(sentence))
打印结果
精准模式: [‘订单', ‘数据分析']
全模式: [‘订单', ‘订单数', ‘单数', ‘数据', ‘数据分析', ‘分析']
搜索引擎模式: [‘订单', ‘数据', ‘分析', ‘数据分析']
1.3、词性标注
jieba.posseg importjieba.possegasjp sentence='我爱Python数据分析' posseg=jp.cut(sentence) foriinposseg: print(i.__dict__) #print(i.word,i.flag)
打印结果
{‘word':‘我',‘flag':‘r'} {‘word':‘爱',‘flag':‘v'} {‘word':‘Python',‘flag':‘eng'} {‘word':‘数据分析',‘flag':‘l'}
词性标注表
标注 | 解释 | 标注 | 解释 | 标注 | 解释 |
---|---|---|---|---|---|
a | 形容词 | mq | 数量词 | tg | 时语素 |
ad | 副形词 | n | 名词 | u | 助词 |
ag | 形语素 | ng | 例:义 乳 亭 | ud | 例:得 |
an | 名形词 | nr | 人名 | ug | 例:过 |
b | 区别词 | nrfg | 也是人名 | uj | 例:的 |
c | 连词 | nrt | 也是人名 | ul | 例:了 |
d | 副词 | ns | 地名 | uv | 例:地 |
df | 例:不要 | nt | 机构团体 | uz | 例:着 |
dg | 副语素 | nz | 其他专名 | v | 动词 |
e | 叹词 | o | 拟声词 | vd | 副动词 |
f | 方位词 | p | 介词 | vg | 动语素 |
g | 语素 | q | 量词 | vi | 例:沉溺于 等同于 |
h | 前接成分 | r | 代词 | vn | 名动词 |
i | 成语 | rg | 例:兹 | vq | 例:去浄 去过 唸过 |
j | 简称略语 | rr | 人称代词 | x | 非语素字 |
k | 后接成分 | rz | 例:这位 | y | 语气词 |
l | 习用语 | s | 处所词 | z | 状态词 |
m | 数词 | t | 时间词 | zg | 例:且 丗 丟 |
1.4、词语出现的位置
jieba.tokenize(sentence) importjieba sentence='订单数据分析' generator=jieba.tokenize(sentence) forpositioningenerator: print(position)
打印结果
(‘订单',0,2) (‘数据分析',2,6)
2、词典
2.1、默认词典
importjieba,os,pandasaspd #词典所在位置 print(jieba.__file__) jieba_dict=os.path.dirname(jieba.__file__)+r'\dict.txt' #读取字典 df=pd.read_table(jieba_dict,sep='',header=None)[[0,2]] print(df.head()) #转字典 dt=dict(df.values) print(dt.get('暨南大学'))
2.2、添词和删词
往词典添词
add_word(word, freq=None, tag=None)
往词典删词,等价于add_word(word, freq=0)
del_word(word)
importjieba sentence='天长地久有时尽,此恨绵绵无绝期' #添词 jieba.add_word('时尽',999,'nz') print('添加【时尽】:',jieba.lcut(sentence)) #删词 jieba.del_word('时尽') print('删除【时尽】:',jieba.lcut(sentence))
打印结果
添加【时尽】: [‘天长地久', ‘有', ‘时尽', ‘,', ‘此恨绵绵', ‘无', ‘绝期']
删除【时尽】: [‘天长地久', ‘有时', ‘尽', ‘,', ‘此恨绵绵', ‘无', ‘绝期']
2.3、自定义词典加载
新建词典,按照格式【单词 词频 词性】添词,以UTF-8编码保存
使用函数load_userdict加载词典
importos,jieba #创建自定义字典 my_dict='my_dict.txt' withopen(my_dict,'w',encoding='utf-8')asf: f.write('慕容紫英9nr\n云天河9nr\n天河剑9nz') #加载字典进行测试 sentence='慕容紫英为云天河打造了天河剑' print('加载前:',jieba.lcut(sentence)) jieba.load_userdict(my_dict) print('加载后:',jieba.lcut(sentence)) os.remove(my_dict)
打印结果
加载前: [‘慕容', ‘紫英为', ‘云', ‘天河', ‘打造', ‘了', ‘天河', ‘剑']
加载后: [‘慕容紫英', ‘为', ‘云天河', ‘打造', ‘了', ‘天河剑']
2.4、使单词中的字符连接或拆分
suggest_freq(segment, tune=False)
importjieba sentence='上穷碧落下黄泉,两处茫茫皆不见' print('修正前:','|'.join(jieba.cut(sentence))) jieba.suggest_freq(('落','下'),True) print('修正后:','|'.join(jieba.cut(sentence)))
打印结果
修正前: 上穷 | 碧 | 落下 | 黄泉 | , | 两处 | 茫茫 | 皆 | 不见
修正后: 上穷 | 碧落 | 下 | 黄泉 | , | 两处 | 茫茫 | 皆 | 不见
3、jieba分词原理
基于词典,对句子进行词图扫描,生成所有成词情况所构成的有向无环图(Directed Acyclic Graph)
根据DAG,反向计算最大概率路径(动态规划算法;取对数防止下溢,乘法运算转为加法)
根据路径获取最大概率的分词序列
importjieba sentence='中心小学放假' DAG=jieba.get_DAG(sentence) print(DAG) route={} jieba.calc(sentence,DAG,route) print(route)
DAG
{0: [0, 1, 3], 1: [1], 2: [2, 3], 3: [3], 4: [4, 5], 5: [5]}
最大概率路径
{6: (0, 0), 5: (-9.4, 5), 4: (-12.6, 5), 3: (-20.8, 3), 2: (-22.5, 3), 1: (-30.8, 1), 0: (-29.5, 3)}
4、识别【带空格的词】
示例:使Blade Master这类中间有空格的词被识别
importjieba,re sentence='BladeMaster疾风刺杀Archmage' jieba.add_word('BladeMaster')#添词 print('修改前:',jieba.lcut(sentence)) jieba.re_han_default=re.compile('(.+)',re.U)#修改格式 print('修改后:',jieba.lcut(sentence))
打印结果
修改前: [‘Blade', ' ', ‘Master', ‘疾风', ‘刺杀', ‘Archmage']
修改后: [‘Blade Master', ‘疾风', ‘刺杀', ‘Archmage']
5、其它
5.1、并行分词
运行环境:linux系统
开启并行分词模式,参数n为并发数:jieba.enable_parallel(n)
关闭并行分词模式:jieba.disable_parallel()
5.2、关键词提取
基于TF-IDF:jieba.analyse
基于TextRank:jieba.textrank
importjieba.analyseasja,jieba text='柳梦璃施法破解了狐仙的法术' jieba.add_word('柳梦璃',tag='nr') keywords1=ja.extract_tags(text,allowPOS=('n','nr','ns','nt','nz')) print('基于TF-IDF:',keywords1) keywords2=ja.textrank(text,allowPOS=('n','nr','ns','nt','nz')) print('基于TextRank:',keywords2)
打印结果
基于TF-IDF: [‘柳梦璃', ‘狐仙', ‘法术']
基于TextRank: [‘狐仙', ‘柳梦璃', ‘法术']
5.3、修改HMM参数
importjieba text='柳梦璃解梦C法' print(jieba.lcut(text,HMM=False))#['柳','梦','璃','解梦','C','法'] print(jieba.lcut(text))#['柳梦璃','解梦','C','法'] jieba.finalseg.emit_P['B']['C']=-1e-9#begin print(jieba.lcut(text))#['柳梦璃','解梦','C','法'] jieba.finalseg.emit_P['M']['梦']=-100#middle print(jieba.lcut(text))#['柳','梦璃','解梦','C','法'] jieba.finalseg.emit_P['S']['梦']=-.1#single print(jieba.lcut(text))#['柳','梦','璃','解梦','C','法'] jieba.finalseg.emit_P['E']['梦']=-.01#end print(jieba.lcut(text))#['柳梦','璃','解梦','C','法'] jieba.del_word('柳梦')#Force_Split_Words print(jieba.lcut(text))#['柳','梦','璃','解梦','C','法']
[‘柳', ‘梦', ‘璃', ‘解梦', ‘C', ‘法']
[‘柳梦璃', ‘解梦', ‘C', ‘法']
[‘柳梦璃', ‘解梦', ‘C', ‘法']
[‘柳', ‘梦璃', ‘解梦', ‘C', ‘法']
[‘柳', ‘梦', ‘璃', ‘解梦', ‘C', ‘法']
[‘柳梦', ‘璃', ‘解梦', ‘C', ‘法']
[‘柳', ‘梦', ‘璃', ‘解梦', ‘C', ‘法']
以上就是如何在python中使用jieba中文分词库,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注恰卡编程网行业资讯频道。
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...