python中文分词库jieba使用方法详解


Posted in Python onFebruary 11, 2020

安装python中文分词库jieba

法1:Anaconda Prompt下输入conda install jieba

法2:Terminal下输入pip3 install jieba

1、分词

1.1、CUT函数简介

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

返回生成器,遍历生成器即可获得分词的结果

lcut(sentence)

返回分词列表

import jieba
sentence = '我爱自然语言处理'
# 创建【Tokenizer.cut 生成器】对象
generator = jieba.cut(sentence)
# 遍历生成器,打印分词结果
words = '/'.join(generator)
print(words)

打印结果

我/爱/自然语言/处理

import jieba
print(jieba.lcut('我爱南海中学'))

打印结果

[‘我', ‘爱', ‘南海中学']

1.2、分词模式

精确模式:精确地切开

全模式:所有可能的词语都切出,速度快

搜索引擎模式:在精确模式的基础上,对长词再次切分

import jieba
sentence = '订单数据分析'
print('精准模式:', jieba.lcut(sentence))
print('全模式:', jieba.lcut(sentence, cut_all=True))
print('搜索引擎模式:', jieba.lcut_for_search(sentence))

打印结果

精准模式: [‘订单', ‘数据分析']

全模式: [‘订单', ‘订单数', ‘单数', ‘数据', ‘数据分析', ‘分析']

搜索引擎模式: [‘订单', ‘数据', ‘分析', ‘数据分析']

1.3、词性标注

jieba.posseg
import jieba.posseg as jp
sentence = '我爱Python数据分析'
posseg = jp.cut(sentence)
for i in posseg:
 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 例:且 ?F ?G

1.4、词语出现的位置

jieba.tokenize(sentence)
import jieba
sentence = '订单数据分析'
generator = jieba.tokenize(sentence)
for position in generator:
 print(position)

打印结果

(‘订单', 0, 2)
(‘数据分析', 2, 6)

2、词典

2.1、默认词典

import jieba, os, pandas as pd
# 词典所在位置
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('暨南大学'))

python中文分词库jieba使用方法详解

2.2、添词和删词

往词典添词

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

往词典删词,等价于add_word(word, freq=0)

del_word(word)

import jieba
sentence = '天长地久有时尽,此恨绵绵无绝期'
# 添词
jieba.add_word('时尽', 999, 'nz')
print('添加【时尽】:', jieba.lcut(sentence))
# 删词
jieba.del_word('时尽')
print('删除【时尽】:', jieba.lcut(sentence))

打印结果

添加【时尽】: [‘天长地久', ‘有', ‘时尽', ‘,', ‘此恨绵绵', ‘无', ‘绝期']

删除【时尽】: [‘天长地久', ‘有时', ‘尽', ‘,', ‘此恨绵绵', ‘无', ‘绝期']

2.3、自定义词典加载

新建词典,按照格式【单词 词频 词性】添词,以UTF-8编码保存

使用函数load_userdict加载词典

import os, jieba
# 创建自定义字典
my_dict = 'my_dict.txt'
with open(my_dict, 'w', encoding='utf-8') as f:
 f.write('慕容紫英 9 nr\n云天河 9 nr\n天河剑 9 nz')
# 加载字典进行测试
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)

import jieba
sentence = '上穷碧落下黄泉,两处茫茫皆不见'
print('修正前:', ' | '.join(jieba.cut(sentence)))
jieba.suggest_freq(('落', '下'), True)
print('修正后:', ' | '.join(jieba.cut(sentence)))

打印结果

修正前: 上穷 | 碧 | 落下 | 黄泉 | , | 两处 | 茫茫 | 皆 | 不见

修正后: 上穷 | 碧落 | 下 | 黄泉 | , | 两处 | 茫茫 | 皆 | 不见

3、jieba分词原理

基于词典,对句子进行词图扫描,生成所有成词情况所构成的有向无环图(Directed Acyclic Graph)

根据DAG,反向计算最大概率路径(动态规划算法;取对数防止下溢,乘法运算转为加法)

根据路径获取最大概率的分词序列

import jieba
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这类中间有空格的词被识别

import jieba, re
sentence = 'Blade Master疾风刺杀Archmage'
jieba.add_word('Blade Master') # 添词
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

import jieba.analyse as ja, 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参数

import jieba
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', '法']

print

[‘柳', ‘梦', ‘璃', ‘解梦', ‘C', ‘法']

[‘柳梦璃', ‘解梦', ‘C', ‘法']

[‘柳梦璃', ‘解梦', ‘C', ‘法']

[‘柳', ‘梦璃', ‘解梦', ‘C', ‘法']

[‘柳', ‘梦', ‘璃', ‘解梦', ‘C', ‘法']

[‘柳梦', ‘璃', ‘解梦', ‘C', ‘法']

[‘柳', ‘梦', ‘璃', ‘解梦', ‘C', ‘法']

更多关于python中文分词库jieba使用方法请查看下面的相关链接

Python 相关文章推荐
Python科学计算之Pandas详解
Jan 15 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
利用python画出折线图
Jul 26 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python selenium firefox使用详解
Feb 26 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 Python
python实现录屏功能(亲测好用)
Mar 02 Python
python基于socket函数实现端口扫描
May 28 Python
python单例模式的应用场景实例讲解
Feb 24 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
Transpose 数组行列转置的限制方式
Feb 11 #Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 #Python
tensorflow多维张量计算实例
Feb 11 #Python
python误差棒图errorbar()函数实例解析
Feb 11 #Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 #Python
python scatter函数用法实例详解
Feb 11 #Python
python可视化text()函数使用详解
Feb 11 #Python
You might like
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
2013/12/29 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
求职信需要的五点内容
2014/02/01 职场文书
淘宝活动策划方案
2014/02/06 职场文书
交通安全责任书范本
2014/07/24 职场文书
出纳岗位职责
2015/01/31 职场文书
七一建党节慰问信
2015/02/14 职场文书
学校推普周活动总结
2015/05/07 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
redis内存空间效率问题的深入探究
2021/05/17 Redis
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
js判断两个数组相等的5种方法
2022/05/06 Javascript
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL