文章目录

  • 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、自定义词典加载

  1. 新建词典,按照格式【单词 词频 词性】添词,以UTF-8编码保存
  2. 使用函数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分词原理

  1. 基于词典,对句子进行词图扫描,生成所有成词情况所构成的有向无环图Directed Acyclic Graph)
  2. 根据DAG,反向计算最大概率路径(动态规划算法;取对数防止下溢,乘法运算转为加法)
  3. 根据路径获取最大概率的分词序列
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’, ‘法’]

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))
print
[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(小白进)相关推荐

  1. python中文分词---jieba

    原文地址:http://blog.csdn.net/sherlockzoom/article/details/44566425 jieba "结巴"中文分词:做最好的 Python ...

  2. Python中文分词--jieba的基本使用

    中文分词的原理 1.中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词. 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程 2.现有的 ...

  3. Python中文分词 jieba 十五分钟入门与进阶

    文章目录 整体介绍 三种分词模式与一个参数 关键词提取 中文歧义测试与去除停用词 三种可以让分词更准确的方法 并行计算 整体介绍 jieba 基于Python的中文分词工具,安装使用非常方便,直接pi ...

  4. python中文分词jieba总结

    1. GitHub:https://github.com/fxsjy/jieba 2.分词 jieba.cut 方法接受三个输入参数: 需要分词的字符串:cut_all 参数用来控制是否采用全模式:H ...

  5. 【NLP】jieba分词-Python中文分词领域的佼佼者

    1. jieba的江湖地位 NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽视的力量便是jieba分词,号称要做最好的 Python 中文分词组件. "最好的& ...

  6. [工具]python中文分词---【jieba】

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") C ...

  7. 3、Python 中文分词组件Jieba

    在自然语言处理中,分词是一项最基本的技术.中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语以字为基本书写单位,词语之间没有明显的区分标记,需要人为切分.现在开源的中文分词工具有 ...

  8. 资源 | Python中文分词工具大合集

    跟着博主的脚步,每天进步一点点 这篇文章事实上整合了之前文章的相关介绍,同时添加一些其他的Python中文分词相关资源,甚至非Python的中文分词工具,仅供参考. 首先介绍之前测试过的8款中文分词工 ...

  9. Python中文分词及词频统计

    Python中文分词及词频统计 中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是 ...

最新文章

  1. gitolite搭建
  2. 阿里云centos 7.6安装mysql_阿里云服务器中Linux下centos7.6安装mysql8.0.11
  3. MS SQLServer2000中在还原备份文件时出现的奇怪问题.
  4. 11-selenium浏览器自动化
  5. C# 网络编程之webBrowser乱码问题及解决知识
  6. 【caffe-Windows】关于LSTM的简单小例子
  7. 风能matlab仿真_发现潜力:使用计算机视觉对可再生风能发电场的主要区域进行分类(第1部分)
  8. 【LeetCode笔记】53. 最大子序和(Java、动态规划)
  9. MacBook 显示未连接任何摄影机,视频镜头不能用怎么办?
  10. 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接---个人整理
  11. 递归删除文件和删除文件夹
  12. 江苏省南京市谷歌高清卫星地图下载
  13. 3376.成绩排序2
  14. h61 nvme硬盘_让SSD起飞,玩转固态硬盘工具
  15. Tensorflow Dataset API 入门
  16. 光纤跳线、尾纤、光纤连接器之间有什么区别
  17. ANSYS经典界面出图技巧总结
  18. 微信公众号config:invalid signature签名失效
  19. 推荐:走遍美国视频下载
  20. C语言练习:显示一个月的提醒列表

热门文章

  1. 计算机信息检索公选课作业,学习#网络信息检索 选修课后的感想
  2. 怎样在计算机桌面上设置快捷键,Win7系统电脑快捷键如何设置
  3. 媛姐有约×元杰 | 国产公链的初心与热爱
  4. 获取摄像头和麦克风权限_Firefox--摄像头麦克风权限
  5. linux编程学习--SIG信号
  6. 使用hutool-all进行邮件发送报错Could not connect to SMTP host: smtp.qq.com, port: 465
  7. iOS学习—设置启动页停留时间
  8. Python2与Python3有何区别?
  9. [转]清华差生10年奋斗经历
  10. 如何安装STM32CubeMX