【马上NLP】jieba结巴分词工具常用功能详细介绍 笔记
视频地址
图片与代码均源自up主和官方文档
https://www.bilibili.com/video/BV1xy4y187iC
jieba官方文档
jieba安装
需要python3.7的版本
- 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
- 如果需要使用paddle模式下的分词和词性标注功能,请先安装paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。
功能
常用API接口:
-
jieba.cut 以及 jieba.cut_for_search :返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),用这个还api还要加for循环。
-
jieba.lcut 以及 jieba.lcut_for_search :直接返回 list,用这个api直接可以打印出结果,建议使用这个。
1和2对比:
import jieba
str = '我来到北京清华大学'
print(str)
print('jieba.cut(str):', jieba.cut(str))
print('list(jieba.cut(str)):', list(jieba.cut(str)))
print('jieba.lcut(str):', jieba.lcut(str))
输出:
我来到北京清华大学
jieba.cut(str): <generator object Tokenizer.cut at 0x00000198409560C8>
list(jieba.cut(str)): ['我', '来到', '北京', '清华大学']
jieba.lcut(str): ['我', '来到', '北京', '清华大学']
分词
四种分词模式对比:
- 精确模式:试图将句子最精确地切开,适合文本分析;
- 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
- paddle模式:利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。
四种分词模式对比:
import jieba
jieba.enable_paddle() # 引入paddle包,开启paddle模式
str = '我来到北京清华大学'
print(str)
print('精确模式:', jieba.lcut(str))
print('全模式:', jieba.lcut(str, cut_all=True))
print('搜索引擎模式:', jieba.lcut_for_search(str))
print('paddle模式:', jieba.lcut(str, use_paddle=True))
输出:
我来到北京清华大学
精确模式: ['我', '来到', '北京', '清华大学']
全模式: ['我', '来到', '北京', '清华', '清华大学', '华大', '大学']
搜索引擎模式: ['我', '来到', '北京', '清华', '华大', '大学', '清华大学']
paddle模式: ['我', '来到', '北京清华大学']
是否关闭发现新词:
jieba.lcut()函数默认带有HMM用于发现新词。
import jieba
str = '他来到了网易杭研大厦'
print(str)
print('精确模式,默认开启HMM:', jieba.lcut(str))
print('精确模式:', jieba.lcut(str, HMM=False))
输出:
他来到了网易杭研大厦
精确模式,默认开启HMM: ['他', '来到', '了', '网易', '杭研', '大厦']
精确模式,关闭HMM: ['他', '来到', '了', '网易', '杭', '研', '大厦']
词性标注
import jieba
import jieba.posseg as pseg
jieba.enable_paddle() # 引入paddle包,开启paddle模式
str = '我来到北京清华大学'
print(str)
print('默认模式:', pseg.lcut(str))
print('paddle模式:', pseg.lcut(str, use_paddle=True))
输出:
我来到北京清华大学
默认模式: [pair('我', 'r'), pair('来到', 'v'), pair('北京', 'ns'), pair('清华大学', 'nt')]
paddle模式: [pair('我', 'r'), pair('来到', 'v'), pair('北京清华大学', 'ORG')]
关键词提取
方式
- 基于 TF-IDF 算法
- 基于 TextRank 算法
import jieba.analyse
str = '我来到北京清华大学'
print(str)
print('TF-IDF:', jieba.analyse.extract_tags(str))
print('TextRank:', jieba.analyse.textrank(str))
输出:
我来到北京清华大学
TF-IDF: ['清华大学', '来到', '北京']
TextRank: ['来到', '北京']
参数
- topK :返回几个 TF/IDF 权重最大的关键词,默认值为 20
- withWeight :是否一并返回关键词权重值,默认值为 False
- allowPOS :返回指定词性的词,默认值为空,即不筛选
topK
import jieba.analyse
str = '此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。'
print(str)
# topK
print('默认topK=20:', jieba.analyse.extract_tags(str))
print('topK=10:', jieba.analyse.extract_tags(str, topK=10))
输出:
此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。
默认topK=20: ['欧亚', '吉林', '置业', '万元', '增资', '4.3', '7000', '2013', '139.13', '实现', '综合体', '经营范围', '亿元', '在建', '全资', '注册资本', '百货', '零售', '子公司', '营业']
topK=10: ['欧亚', '吉林', '置业', '万元', '增资', '4.3', '7000', '2013', '139.13', '实现']
withWeight
import jieba.analyse
str = '我来到北京清华大学'
print(str)
# withWeight
print('默认withWeight=False:', jieba.analyse.extract_tags(str))
print('withWeight=True:', jieba.analyse.extract_tags(str, withWeight=True))
输出:
我来到北京清华大学
默认withWeight=False: ['清华大学', '来到', '北京']
withWeight=True: [('清华大学', 2.6935315738733334), ('来到', 1.79522896137), ('北京', 1.5558007695733334)]
allowPOS
import jieba.analyse
str = '我来到北京清华大学'
print(str)
# allowPOS
print('默认显示全部词性:', jieba.analyse.extract_tags(str))
print('只显示\'v\'词性:', jieba.analyse.extract_tags(str, allowPOS=('v')))
输出:
我来到北京清华大学
默认显示全部词性: ['清华大学', '来到', '北京']
只显示'v'词性: ['来到']
载入词典
意义:开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。
用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径。
构造字典:词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
字典示例:
创新办 3 i
云计算 5
凱特琳 nz
台中