python jieba模块详解
借鉴于 【jieba 模块文档】
用于自己学习和记录!
jieba 模块是一个用于中文分词的模块
此模块支持三种分词模式
- 精确模式(试图将句子最精确的切开,适合文本分析)
- 全模式(把句子在所有可以成词的成语都扫描出来,速度非常快,但是不能解决歧义的问题)
- 搜索引擎模式(在精确模式的基础上,对长词再次切分,提高召回率)
### 主要功能
1. 分词
需要分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。但是,不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
jieba.cut()
jieba.lcut()
此方法接受三个参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型
lcut 方法直接返回 list,cut 方法返回一个 可迭代的 generator
用法
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("精确模式: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print("默认模式: " + "/ ".join(seg_list))
结果:
Full Mode: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
Default Mode: 我/ 来到/ 北京/ 清华大学
默认模式: 他/ 来到/ 了/ 网易/ 杭研/ 大厦
###### **jieba.cut_for_search**
###### **jieba.lcut_for_search**
此方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
cut_for_search返回一个 可迭代的 generator,lcut_for_search返回一个list
用法
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
结果:
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
###### **jieba.Tokenizer(dictionary=DEFAULT_DICT)**
新建自定义分词器,可用于同时使用不同词典。
2. 添加自定义词典
其包含以下功能:
- 载入字典
- 调整词典
载入字典
开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。
jieba.load_userdict(file_name)
添加指定文件名的词典,file_name参数 为文件类对象或自定义词典的路径,file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
词典的格式为:一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。例如:
创新办 3 i
云计算 5
凱特琳 nz
台中
##### 调整词典
add_word(word, freq=None, tag=None)
向词典中添加一个词。freq 和 tag 可以省略,freq 默认为一个计算值
del_word(word)
在词典中删除一个词。
suggest_freq(segment, tune=True)
调节单个词语的词频,使其能(或不能)被分出来。
使用此功能时,HMM 新词发现功能时可能无效。
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中将/出错/。
>>> jieba.suggest_freq(('中', '将'), True)
494
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中/将/出错/。
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台/中/」/正确/应该/不会/被/切开
>>> jieba.suggest_freq('台中', True)
69
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台中/」/正确/应该/不会/被/切开
#### 3. 关键词提取
基于 TF-IDF 算法的关键词抽取
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence参数 为待提取的文本,topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20,withWeight 为是否一并返回关键词权重值,默认值为 False,allowPOS 仅包括指定词性的词,默认值为空,即不筛选
jieba.analyse.TFIDF(idf_path=None)
新建 TFIDF 实例,idf_path 为 IDF 频率文件
jieba.analyse.set_idf_path(file_name)
关键词提取所使用逆向文件频率(即IDF)文本语料库可以切换成自定义语料库的路径,file_name 为自定义语料库的路径。
jieba.analyse.set_stop_words(file_name)
关键词提取所使用停止词(即Stop Words)文本语料库可以切换成自定义语料库的路径,file_name 为自定义语料库的路径。
用法
# 可以先构建一个TFIDF实例,再修改实例中的内容,提取关键字
>>> import jieba.analyse
>>> tfidf = jieba.analyse.TFIDF()
>>> tfidf.set_stop_words(file_name) # file_name未填写
>>> tfidf.set_idf_path(file_name) # file_name未填写
>>> tfidf.extract_tags(sentence) # 设定完毕即可开始提取关键字
# 也可以直接调用函数修改,看了源码,其模块的构造文件里面包含对TFIDF实例的调用
>>> import jieba.analyse
>>> jieba.set_stop_words(file_name) # 可以直接这样填写
>>> jieba.analyse.set_idf_path(file_name)
>>> jieba.analyse.extract_tags(sentence)
##### 基于 TextRank 算法的关键词抽取
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
接口与上面相同,但此处的默认词性需要注意
jieba.analyse.TextRank()
新建自定义 TextRank 实例
用法
>>> import jieba.analyse
>>> s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
>>> for t, w in jieba.analyse.textrank(s, withWeight=True):
print('%s, %s'% (t, w))
# 或者这样写
>>> import jieba.analyse
>>> s = "此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。"
>>> tr = jieba.analyse.TextRank()
>>> for t, w in tr.textrank(s, withWeight=True):
print('%s, %s'% (t, w))
结果
# 两个结果一致,都为如下
吉林, 1.0
欧亚, 0.9966893354178172
置业, 0.6434360313092776
实现, 0.5898606692859626
收入, 0.43677859947991454
增资, 0.4099900531283276
子公司, 0.35678295947672795
城市, 0.34971383667403655
商业, 0.34817220716026936
业务, 0.3092230992619838
在建, 0.3077929164033088
营业, 0.3035777049319588
全资, 0.303540981053475
综合体, 0.29580869172394825
注册资本, 0.29000519464085045
有限公司, 0.2807830798576574
零售, 0.27883620861218145
百货, 0.2781657628445476
开发, 0.2693488779295851
经营范围, 0.2642762173558316
#### 4. 词性标注
jieba.posseg.POSTokenizer(tokenizer=None)
新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
用法
>>> import jieba.posseg
>>> words = jieba.posseg.cut("我爱北京天安门")
>>> for word, flag in words:
print('%s, %s' % (word, flag))
# 或者这样写
>>> import jieba.posseg
>>> pt = jieba.posseg.POSTokenizer()
>>> words = pt.cut("我爱北京天安门")
>>> for word, flag in words:
print('%s, %s' % (word, flag))
结果
# 两种结果一致
我, r
爱, v
北京, ns
天安门, ns
#### 5. Tokenize:返回词语在原文的起止位置
jieba.tokenize()
此方法输入的参数只接受 unicode 。
用法
import jieba
# 默认模式
result = jieba.tokenize(u'永和服装饰品有限公司')
for tk in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
# 搜索模式
result = jieba.tokenize(u'永和服装饰品有限公司', mode='search')
for tk in result:
print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
结果
# 默认模式
word 永和 start: 0 end:2
word 服装 start: 2 end:4
word 饰品 start: 4 end:6
word 有限公司 start: 6 end:10
# 搜索模式
word 永和 start: 0 end:2
word 服装 start: 2 end:4
word 饰品 start: 4 end:6
word 有限 start: 6 end:8
word 公司 start: 8 end:10
word 有限公司 start: 6 end:10
python jieba模块详解的更多相关文章
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简介 ...
- python docopt模块详解
python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- python pathlib模块详解
python pathlib模块详解
- Python Fabric模块详解
Python Fabric模块详解 什么是Fabric? 简单介绍一下: Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...
- python time 模块详解
Python中time模块详解 发表于2011年5月5日 12:58 a.m. 位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...
- python常用模块详解
python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...
- python os模块详解
一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...
- Python ZipFile模块详解(转)
Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...
随机推荐
- HTML加载顺序
一.js执行顺序 //1. 外部引入的js文件,会异步下载并且执行(<script>块中的语句),根据引入的位置会在不同时刻执行 //2.$().ready(function() {}) ...
- redis笔记_源码_双端链表list
参考:https://redissrc.readthedocs.io/en/latest/datastruct/adlist.html
- PouchContainer 开源版本及内部版本一致性实践
PouchContainer 开源版本及内部版本一致性实践 为什么要做内外版本一致 对外开源是提升影响力.共建生态的有力手段.在项目对外开源的过程中,首先是将可以开源的部分抽离出来,发布一个“开源版本 ...
- 深入解读阿里云数据库POLARDB核心功能会话读一致性
POLARDB架构 我们知道,POLARDB是一个由多个节点构成的数据库集群,一个主节点,多个读节点.对外默认提供两个地址,一个是集群地址,一个是主地址,推荐使用集群地址,因为它具备读写分离功能可以把 ...
- thinkphp 静态路由
静态路由其实属于规则路由的静态简化版(又称为URL映射),路由定义中不包含动态参数,静态路由不需要遍历路由规则而是直接定位,因此效率较高,但作用也有限. 如果我们定义了下面的静态路由 'URL_ROU ...
- excel导入、下载功能
1.excel导入.下载功能 2.首先,我们是居于maven项目进行开发引入poi,如果不是那就手动下载相应的jar包引入项目就可以了 <!-- poi --> <dependenc ...
- (转)iframe 高度100%时,出现垂直滚动条
问题 需求是这样的,iframe在一个div中,并且iframe高度与div一样,所以设置了iframe高度是100%,结果div出现了滚动条,在排除了padding.margin的因素外,还是有滚动 ...
- Block的Retain Cycle的解决方法
一个使用Block语法的实例变量,在引用另一个实例变量的时候,经常会引起retain cycle.这个问题在使ASIHTTPRequest的block语法的时候会时不时的碰到.这个问题困扰了我这个小白 ...
- iOS开发之SceneKit框架--加载多个模型.dae/.scn文件
1.通过SCNGeometry或子类SCNParametricGeometry创建 相关链接:iOS开发之SceneKit框架--SCNGeometry.h iOS开发之SceneKit框架--SCN ...
- vue语法糖
加冒号,就是个语法糖 两点: 例如 export default { data(){ return { item: { src: 'xxxxx' } } } } <img :src='item ...