Python 中文分词 jieba(小白进)
文章目录
- 0、安装
- 1、分词
- 1.1、CUT函数简介
- 1.2、分词模式
- 1.3、词性标注
- 1.4、词语出现的位置
- 2、词典
- 2.1、默认词典
- 2.2、添词和删词
- 2.3、自定义词典加载
- 2.4、使单词中的字符连接或拆分
- 3、[jieba分词原理]
- 4、[识别【带空格的词】]
- 5、其它
- 5.1、并行分词
- 5.2、关键词提取
- 5.3、修改HMM参数
- 6、词法分析(新版)
0、安装
法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 | 例:且 丗 丟 |
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('暨南大学'))
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、识别【带空格的词】
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', '法']
-
[‘柳’, ‘梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳梦璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳梦璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳’, ‘梦璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳’, ‘梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
[‘柳’, ‘梦’, ‘璃’, ‘解梦’, ‘C’, ‘法’]
6、词法分析(新版)
标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 |
---|---|---|---|---|---|---|---|
n | 普通名词 | f | 方位名词 | s | 处所名词 | t | 时间 |
nr | 人名 | ns | 地名 | nt | 机构名 | nw | 作品名 |
nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 |
a | 形容词 | ad | 副形词 | an | 名形词 | d | 副词 |
m | 数量词 | q | 量词 | r | 代词 | p | 介词 |
c | 连词 | u | 助词 | xc | 其他虚词 | w | 标点符号 |
PER | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
from jieba import enable_paddle, posseg # pip install jieba --upgrade
enable_paddle() # pip install paddlepaddle-tiny==1.6.1
print(posseg.lcut('小基基在南海注册桂城人工智能公司'))
print(posseg.lcut('小基基在南海注册桂城人工智能公司', use_paddle=True))
-
[pair(‘小基基’, ‘nr’), pair(‘在’, ‘p’), pair(‘南海’, ‘ns’), pair(‘注册’, ‘v’), pair(‘桂城’, ‘ns’), pair(‘人工智能’, ‘n’), pair(‘公司’, ‘n’)]
[pair(‘小基基’, ‘PER’), pair(‘在’, ‘p’), pair(‘南海’, ‘LOC’), pair(‘注册’, ‘v’), pair(‘桂城人工智能公司’, ‘ORG’)]
Python 中文分词 jieba(小白进)相关推荐
- python中文分词---jieba
原文地址:http://blog.csdn.net/sherlockzoom/article/details/44566425 jieba "结巴"中文分词:做最好的 Python ...
- Python中文分词--jieba的基本使用
中文分词的原理 1.中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词. 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程 2.现有的 ...
- Python中文分词 jieba 十五分钟入门与进阶
文章目录 整体介绍 三种分词模式与一个参数 关键词提取 中文歧义测试与去除停用词 三种可以让分词更准确的方法 并行计算 整体介绍 jieba 基于Python的中文分词工具,安装使用非常方便,直接pi ...
- python中文分词jieba总结
1. GitHub:https://github.com/fxsjy/jieba 2.分词 jieba.cut 方法接受三个输入参数: 需要分词的字符串:cut_all 参数用来控制是否采用全模式:H ...
- 【NLP】jieba分词-Python中文分词领域的佼佼者
1. jieba的江湖地位 NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽视的力量便是jieba分词,号称要做最好的 Python 中文分词组件. "最好的& ...
- [工具]python中文分词---【jieba】
jieba "结巴"中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") C ...
- 3、Python 中文分词组件Jieba
在自然语言处理中,分词是一项最基本的技术.中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语以字为基本书写单位,词语之间没有明显的区分标记,需要人为切分.现在开源的中文分词工具有 ...
- 资源 | Python中文分词工具大合集
跟着博主的脚步,每天进步一点点 这篇文章事实上整合了之前文章的相关介绍,同时添加一些其他的Python中文分词相关资源,甚至非Python的中文分词工具,仅供参考. 首先介绍之前测试过的8款中文分词工 ...
- Python中文分词及词频统计
Python中文分词及词频统计 中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是 ...
最新文章
- gitolite搭建
- 阿里云centos 7.6安装mysql_阿里云服务器中Linux下centos7.6安装mysql8.0.11
- MS SQLServer2000中在还原备份文件时出现的奇怪问题.
- 11-selenium浏览器自动化
- C# 网络编程之webBrowser乱码问题及解决知识
- 【caffe-Windows】关于LSTM的简单小例子
- 风能matlab仿真_发现潜力:使用计算机视觉对可再生风能发电场的主要区域进行分类(第1部分)
- 【LeetCode笔记】53. 最大子序和(Java、动态规划)
- MacBook 显示未连接任何摄影机,视频镜头不能用怎么办?
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接---个人整理
- 递归删除文件和删除文件夹
- 江苏省南京市谷歌高清卫星地图下载
- 3376.成绩排序2
- h61 nvme硬盘_让SSD起飞,玩转固态硬盘工具
- Tensorflow Dataset API 入门
- 光纤跳线、尾纤、光纤连接器之间有什么区别
- ANSYS经典界面出图技巧总结
- 微信公众号config:invalid signature签名失效
- 推荐:走遍美国视频下载
- C语言练习:显示一个月的提醒列表
热门文章
- 计算机信息检索公选课作业,学习#网络信息检索 选修课后的感想
- 怎样在计算机桌面上设置快捷键,Win7系统电脑快捷键如何设置
- 媛姐有约×元杰 | 国产公链的初心与热爱
- 获取摄像头和麦克风权限_Firefox--摄像头麦克风权限
- linux编程学习--SIG信号
- 使用hutool-all进行邮件发送报错Could not connect to SMTP host: smtp.qq.com, port: 465
- iOS学习—设置启动页停留时间
- Python2与Python3有何区别?
- [转]清华差生10年奋斗经历
- 如何安装STM32CubeMX