1. 介绍

JIEBA 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性:

  • 支持 3 种分词模式:精确模式、全模式、搜索引擎模式
  • 支持繁体分词
  • 支持自定义词典
import jieba
import jieba.posseg as pseg
import jieba.analyse as anls

2. 分词

  可使用 jieba.cutjieba.cut_for_search 方法进行分词,两者所返回的结构都是一个可迭代的 generator,可使用 for 循环来获得分词后得到的每一个词语(unicode),或者直接使用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list。其中:

  • jieba.cutjieba.lcut 接受 3 个参数:

    • 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
    • cut_all 参数:是否使用全模式,默认值为 False
    • HMM 参数:用来控制是否使用 HMM 模型,默认值为 True
  • jieba.cut_for_searchjieba.lcut_for_search 接受 2 个参数:
    • 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
    • HMM 参数:用来控制是否使用 HMM 模型,默认值为 True

2.1 全模式和精确模式

# 全模式
seg_list = jieba.cut("他来到上海交通大学", cut_all=True)
print("【全模式】:" + "/ ".join(seg_list))
# 精确模式
seg_list = jieba.cut("他来到上海交通大学", cut_all=False)
print("【精确模式】:" + "/ ".join(seg_list))

2.2 搜索引擎模式

# 搜索引擎模式
seg_list = jieba.cut_for_search("他毕业于上海交通大学机电系,后来在一机部上海电器科学研究所工作")
print("【搜索引擎模式】:" + "/ ".join(seg_list))

2.3 HMM模型

HMM 模型,即隐马尔可夫模型(Hidden Markov Model, HMM),是一种基于概率的统计分析模型,用来描述一个系统隐性状态的转移和隐性状态的表现概率。在 jieba 中,对于未登录到词库的词,使用了基于汉字成词能力的 HMM 模型和 Viterbi 算法,其大致原理是:
# 未启用 HMM
seg_list = jieba.cut("他来到了网易杭研大厦", HMM=False) #默认精确模式和启用 HMM
print("【未启用 HMM】:" + "/ ".join(seg_list)) 【未启用 HMM】:他/ 来到/ 了/ 网易/ 杭/ 研/ 大厦
# 识别新词
seg_list = jieba.cut("他来到了网易杭研大厦") #默认精确模式和启用 HMM
print("【识别新词】:" + "/ ".join(seg_list))
【识别新词】:他/ 来到/ 了/ 网易/ 杭研/ 大厦

3 添加自定义字典

3.1 载入字典

使用 jieba.load_userdict(file_name) 即可载入词典。

# 示例文本
sample_text = "周大福是创新办主任也是云计算方面的专家"
# 未加载词典
print("【未加载词典】:" + '/ '.join(jieba.cut(sample_text)))
【未加载词典】:周大福/ 是/ 创新/ 办/ 主任/ 也/ 是/ 云/ 计算/ 方面/ 的/ 专家 # 载入词典
jieba.load_userdict("userdict.txt")
# 加载词典后
print("【加载词典后】:" + '/ '.join(jieba.cut(sample_text)))
【加载词典后】:周大福/ 是/ 创新办/ 主任/ 也/ 是/ 云计算/ 方面/ 的/ 专家

3.2 调整字典

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。

jieba.add_word('石墨烯') #增加自定义词语
jieba.add_word('凱特琳', freq=42, tag='nz') #设置词频和词性
jieba.del_word('自定义词') #删除自定义词语

使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。

# 调节词频前
print("【调节词频前】:" + '/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))

4 关键词提取

jieba 提供了两种关键词提取方法,分别基于 TF-IDF 算法和 TextRank 算法。

4.1 基于TF-IDF

  TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的一份文件的重要程度

通过 jieba.analyse.extract_tags 方法可以基于 TF-IDF 算法进行关键词提取,该方法共有 4 个参数:

  • sentence:为待提取的文本
  • topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight:是否一并返回关键词权重值,默认值为 False
  • allowPOS:仅包括指定词性的词,默认值为空

4.2 基于TEXT-RANK

 TextRank 是另一种关键词提取算法,基于大名鼎鼎的 PageRank,其原理可参见论文—— TextRank: Bringing Order into Texts

  通过 jieba.analyse.textrank 方法可以使用基于 TextRank 算法的关键词提取,其与 'jieba.analyse.extract_tags' 有一样的参数,但前者默认过滤词性(allowPOS=('ns', 'n', 'vn', 'v'))。

4.3 自定义语料库
关键词提取所使用逆向文件频率(IDF)文本语料库和停止词(Stop Words)文本语料库可以切换成自定义语料库的路径。

5 词性标注

jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
words = pseg.cut("他改变了中国")

for word, flag in words:
print("{0} {1}".format(word, flag))
他 r
改变 v
了 ul
中国 ns

6 并行分词

将目标文本按行分隔后,把各行文本分配到多个 Python 进程并行分词,然后归并结果,从而获得分词速度的可观提升。用法:

  • jieba.enable_parallel(4):开启并行分词模式,参数为并行进程数
  • jieba.disable_parallel() :关闭并行分词模式

7 返回文本原始的位置

使用 jieba.tokenize 方法可以返回词语在原文的起止位置。
result = jieba.tokenize(u'上海益民食品一厂有限公司')
print("【普通模式】")
for tk in result:
print("word: {0} \t\t start: {1} \t\t end: {2}".format(tk[0],tk[1],tk[2]))
 

jieba 分词使用入门的更多相关文章

  1. widows下jieba分词的安装

    在切词的时候使用到jieba分词器,安装如下: 切入到结巴包,执行 python setup.py install 安装后,可以直接在代码中引用: import jieba

  2. 【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法

    错误现象: 最近在做一个小项目,在Python中使用了jieba分词,感觉非常简洁方便.在Python端进行调试的时候没有任何问题,使用PyInstaller打包成exe文件后,就会报错: 错误原因分 ...

  3. Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  4. python结巴(jieba)分词

    python结巴(jieba)分词 一.特点 1.支持三种分词模式: (1)精确模式:试图将句子最精确的切开,适合文本分析. (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解 ...

  5. pypinyin, jieba分词与Gensim

    一 . pypinyin from pypinyin import lazy_pinyin, TONE, TONE2, TONE3 word = '孙悟空' print(lazy_pinyin(wor ...

  6. 使用pynlpir增强jieba分词的准确度

    在使用jieba分词时,发现分词准确度不高.特别是一些专业词汇,比如堡垒机,只能分出堡垒,并不能分出堡垒机.这样导致的问题是很多时候检索并不准确. 经过对比测试,发现nlpir进行分词效果更好.但是n ...

  7. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

  8. jieba分词(3)

    jieba分词中Tokenize的使用,Tokenize主要是用来返回词语在原文的弃之位置,下面贴上代码: #-*- coding:utf-8 -*- from __future__ import u ...

  9. jieba分词(2)

    结巴分词系统中实现了两种关键词抽取法,一种是TF-IDF关键词抽取算法另一种是TextRank关键词抽取算法,它们都是无监督的算法. 以下是两种算法的使用: #-*- coding:utf-8 -*- ...

随机推荐

  1. Spring学习的第二天

    第二天总共学习了以下内容: spring中的ioc常用注解: 案例使用xml方式和注解方式实现单表的CRUD操作(但还是需要xml配置文件,并不是纯注解的配置): 改造基于注解的Ioc案例,使用纯注解 ...

  2. Spring源码解析-ioc容器的设计

    Spring源码解析-ioc容器的设计 1 IoC容器系列的设计:BeanFactory和ApplicatioContext 在Spring容器中,主要分为两个主要的容器系列,一个是实现BeanFac ...

  3. Java连载57-equals重写、finalize方法、hashCode方法​

    一.关于java语言中如何比较两个字符串是否一致 1.不能使用双等号来比较两个字符串是否相等,应该使用equals方法进行比较,如例子 package com.bjpowernode.java_lea ...

  4. vue组件化思想和模块化

    组件化 注册组件的基本步骤 创建组件构造器 (调用Vue.extend()方法) 注册组件 (调用Vue.component()方法) 注册组件语法糖 省去了调用Vue.extend()的步骤,而是可 ...

  5. Idea中新建yml不显示叶子形状的原因

    IntelliJ IDEA 2019.2.4 x64 (版本),不显示叶子形状,导致写配置无法自动提示(自动提示请安装插件)Spring Assistant 先看一下Editor--->File ...

  6. jquery使用on()方法绑定的事件被执行多次的问题

    jQuery用on()方法绑定了事件之后,在代码执行过程中,可能会遇到事件被多次执行的情况. 本来以为是事件冒泡的问题,后来发现是on()方法的特性引起的问题. 简单还原一下问题的场景 这里简单还原一 ...

  7. Linux系统目录结构知识

    1.Linux目录结构: 逻辑上所有的目录只有一个顶点 /(根),所有目录的起点.根下面是一个类似倒挂的树的层次结构. 目录的结构和分区设备是没有关系的,也就是不同的目录可以跨越不同的磁盘设备或分区. ...

  8. Git原理入门解析

    前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的: 一.Git 简介 Git 是当前流行的分布式 ...

  9. SAP 表汇总

    SAP 表整理:VBKPF-预制凭证抬头表: VBKPF-预制凭证抬头表 VBKPF-预制凭证抬头表 VBSEG-预制凭证行项目表: VBSEG-预制凭证行项目表 VBSEG-预制凭证行项目表 VBS ...

  10. C# -- is和as运算符

    一.is运算符用于判断一个对象是否可以转换为指定的类型,不会抛出异常,返回bool值用来表示是否转换成功: if (myObj is MyClass) { //do... } 当满足以下任意一种情况时 ...