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 ...
随机推荐
- Windows中的"簇"和Linux中的"块"是对应的
扇区是对硬盘而言,块是对文件系统而言. 簇”又称为“分配单元” ,文件系统是操作系统与驱动器之间的接口,当操作系统请求从硬盘里读取一个文件时,会请求相应的文件系统(FAT 16/32/NTFS)打开文 ...
- 关于SecureCRT不能显示输入、换行不正常
网上绿色破解版的SecureCRT会碰到这种问题,即输入字符不显示在终端.换行后下一行的行首有很大一段退格: 如上,输入的指令不显示:回车后下一行的起始位置不对. 碰到这种问题,在波特率.奇偶校验.停 ...
- BIO 详解
调用者主动等待调用的结果 简介 早期的jdk中,采用BIO通信模式: 通常有一个acceptor(消费者) 去负责监听客户端的连接. 它接收到客户端的连接请求之后为每个客户端创建一个线程进行链路处理, ...
- 边双联通分量缩点+树的直径——cf1000E
题意理解了就很好做 题意:给一张无向图,任意取两个点s,t,s->t的路径上必经边数量为k 求这样的s,t,使得k最大 #include<bits/stdc++.h> #define ...
- 大数据之hadoop集群安全模式
集群安全模式1.概述(1)NameNode启动 NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作.-旦在内存中成功建立文件系统元数据的影像,则 ...
- clover无缘无故隐藏书签栏原因
可能是不小心按住了Ctrl+shift+B
- day22_2-sys模块
# ********************day22_2-sys模块 *******************# ********************day22_2-sys模块 ********* ...
- 一些关于Hibernate延迟加载的误区
最近面试别人,正好出的笔试题中有道关于Hibernate延迟加载的问题,聊天过程中发现很多人对Hibernate的延迟加载有些理解误区,写 些东东在这里,希望对大家有所帮助. 首先是第一个误区:延迟加 ...
- spring boot中使用javax.validation以及org.hibernate.validator校验入参
这里springboot用的版本是:<version>2.1.1.RELEASE</version> 自带了hibernate.validator,所以不用添加额外依赖 1.创 ...
- 6_2.springboot2.x整合Druid和配置数据源监控
简介 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss Data ...