借鉴于 【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模块详解的更多相关文章

  1. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  2. python docopt模块详解

    python docopt模块详解 docopt 本质上是在 Python 中引入了一种针对命令行参数的形式语言,在代码的最开头使用 """ ""&q ...

  3. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  4. python pathlib模块详解

    python pathlib模块详解    

  5. Python Fabric模块详解

    Python Fabric模块详解 什么是Fabric? 简单介绍一下: ​ Fabric是一个Python的库和命令行工具,用来提高基于SSH的应用部署和系统管理效率. 再具体点介绍一下,Fabri ...

  6. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  7. python常用模块详解

    python常用模块详解 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用p ...

  8. python os模块详解

    一.Python os模块(Linux环境) 1.1 执行shell命令 os.system('cmd') 执行命令不保存结果 os.popen('command') 执行后返回结果,使用.read( ...

  9. Python ZipFile模块详解(转)

    Python zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个cl ...

随机推荐

  1. RAksmart服务器具备哪些特点?

    美国RAKsmart机房运营多年,前身是提供美国军用服务器业务,拥有着庞大的用户群体和消费者,那RAksmart服务器具备哪些特点呢? 1.美国raksmart服务器特点——硬盘超大 美国raksma ...

  2. android studio 一个项目如何打包多个apk

    1.修改app的build.gradle文件 假设我们同一套代码编译2个app:demo1和demo2 android { ... productFlavors { // demo1 demo1 { ...

  3. drupal7 smtp+mimemail+mailsystem 实现发送html邮件

    1.下载三个模块 smtp: https://www.drupal.org/project/smtp mimemail: https://www.drupal.org/project/mimemail ...

  4. Jmeter插件:jp@gc - Dummy Sampler

    Dummy Sampler可以比较方便地模拟测试场景,自定义Request Data和Response Data 1. 安装插件:打开页面插件管理网站,下载plugins-manager.jar. 在 ...

  5. 尚学python课程---13、python基础语法

    尚学python课程---13.python基础语法 一.总结 一句话总结: legend2系统使我能够快速掌握一门语法,特别有用 pass 语句:空语句:是为了保持程序结构的完整性  :作用:比如: ...

  6. Java并发编程中的若干核心技术,向高手进阶!

    来源:http://www.jianshu.com/p/5f499f8212e7 引言 本文试图从一个更高的视角来总结Java语言中的并发编程内容,希望阅读完本文之后,可以收获一些内容,至少应该知道在 ...

  7. Resource Archiver HDU - 3247 AC自动机+BFS+状压

    题意: 给出n个资源串,m个病毒串,现在要如何连接资源串使得不含病毒串(可以重叠,样例就是重叠的). 题解: 这题的套路和之前的很不同了,之前的AC自动机+DP的题目一般都是通过teir图去转移, 这 ...

  8. 2019-8-31-C#-如何给-ValueTuple-返回值添加注释

    title author date CreateTime categories C# 如何给 ValueTuple 返回值添加注释 lindexi 2019-08-31 16:55:58 +0800 ...

  9. printk函数

    一个不同是 printk 允许你根据消息的严重程度对其分类, 通过附加不同的记录级别或者 优先级在消息上. 你常常用一个宏定义来指示记录级别. 例如, KERN_INFO, 我们之前曾 在一些打印语句 ...

  10. html-圣杯布局

    1.两边固定 当中自适应 2.当中列要完整显示 3.当中列要优先加载 浮动: 搭建完整的布局框架 margin 为赋值:调整旁边两列的位置(使三列布局到一行上) 使用相对定位:调整旁边两列的位置(使两 ...