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 ...
随机推荐
- react 实现类似vue中的<keep-alive>的功能,并解决antd-mobile切换回来时的空白
在移动端的spa页面中,只要使用到了路由就很有必要使用到状态保存的功能,这样才能保证在页面进行切换的时候,让用户可以看到刚才滑动的地方,让用户的体验更加友好.这儿我找到了react-router-ca ...
- PHP如何实现百万级数据导出
公司目前有一个需求,需要对一个日增量在20万+数据量的数据表中的数据进行可自定义条件筛选的导出数据,该功能需要对多个部门进行开发使用,要保证功能可用的前提下,尽量优化体验. 首先介绍一下当前可利用的资 ...
- (一)通过JAVA连接SAP (sapjco3.jar在Windows和MacOS上的配置)
(一)通过JAVA连接SAP调用接口 (sapjco3.jar在Windows和MacOS上的配置) 一.sapjoc3.jar获取 由于sap官网提供的链接需要合作公司提供账号密码,如果商用请索要正 ...
- 通过apiservice反向代理访问service
第一种:NodePort类型 type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30008 第二种:ClusterIP类型 typ ...
- 旋转矩形碰撞检测 OBB方向包围盒算法
在cocos2dx中进行矩形的碰撞检测时需要对旋转过的矩形做碰撞检查,由于游戏没有使用Box2D等物理引擎,所以采用了OBB(Oriented bounding box)方向包围盒算法,这个算法是基于 ...
- python列表的常用操作
列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型.比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型: 列表是p ...
- 牛客网NOIP赛前集训营-普及组(第七场)
链接:C 来源:牛客网 牛牛的同学给牛牛表演了一个读心术:牛牛先任意选定一个非负整数,然后进行N次操作:每次操作前,假设牛牛当前的数是a,那么这个操作可能是a = a + x, 或者a = a * x ...
- ReadyAPI创建功能测试的多种方法
原文:ReadyAPI创建功能测试的多种方法 声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 在ReadyAPI中有多种方法可以创建功能 ...
- Java Annotation试用
Java的很多特性了解的差不多了,比如多线程,io,集合类诸如此类的,但是都没做总结,今天恰好用了Annotation,所以就稍微总结下吧. 要用Annotation首先要搞懂元注解 元注解的作用就是 ...
- Activiti添加批注(comment)信息
在每次提交任务的时候需要描述一些批注信息,例如:请假流程提交的时候要描述信息为什么请假,如果领导驳回可以批注驳回原因等 1.添加批注 // 由于流程用户上下文对象是线程独立的,所以要在需要的位置设置, ...