Python中文分词神器---jieba

Python中文分词神器---jieba

  • jieba简介
  • 安装
  • 特性
    • 三种分词模式
    • 支持繁体分词
    • 支持自定义词典
    • 支持新词识别
  • 功能
    • 分词
      • 精准模式与全模式
      • 搜索引擎模式
      • 细节
    • 添加自定义词典
    • 分词并返回词语在原文的起始位置
    • 并行分词
    • 延迟加载
  • 官网链接

jieba简介

相比英语等语言,用中文写成的文章往往更难分词。英语文章可以用空格来进行单次的区分,而中文词组则连成一片。让机器将中文词组分离的难度远大于在文言文分词题挣扎的我们,而Python的第三方库jieba就是用来处理这个问题的,让机器也能分离中文词组。
相比于其他免费中文分词库,jieba是更加成熟的。

安装

pip install jieba

特性

三种分词模式

  1. 精准模式 试图将句子最精确地切开,适合文本分析,是jieba的默认分词模式。
  2. 搜索引擎模式 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  3. 全模式 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。

上述内容引用自jieba官网

支持繁体分词

支持自定义词典

支持新词识别

像是公司名,地名,这类词也能够被jieba识别出来。
新词的含义是指在训练jieba时,没有出现在数据集中的词。新词识别基于Viterbi算法。

功能

分词

精准模式与全模式

jieba.cut(sentence, cut_all=False, HMM=True, use_paddle=False)
sentence: 需要进行分词的语句
cut_all: 是否开启全模式,取值为布尔值,默认为精准模式。
HMM与use_paddle可以先不理会,使用默认模式即可。

示例:

  1. 精准模式
import jieba
text = '也是微云,也是微云过后月光明。只不见去年的游伴,只没用当日的心情。不愿勾起相思,不敢出门看月。\
偏偏月进窗来,害我相思一夜。'

# 精准模式
result = jieba.cut(text)
print(list(result))


result -----> ['也', '是', '微云', ',', '也', '是', '微云', '过后', '月', '光明', '。', 
'只', '不见', '去年', '的', '游伴', ',', '只', '没用', '当日', '的', '心情', '。', '不愿',
'勾起', '相思', ',', '不敢', '出门', '看', '月', '。', '偏偏', '月', '进窗', '来', ',', '害',
 '我', '相思', '一夜', '。']
  1. 全模式
import jieba
text = '也是微云,也是微云过后月光明。只不见去年的游伴,只没用当日的心情。不愿勾起相思,不敢出门看月。\
偏偏月进窗来,害我相思一夜。'

# 全模式
result = jieba.cut(text, cut_all=True)
print(list(result))


result -----> ['也', '是', '微云', ',', '也', '是', '微云', '过后', '月光', '光明', '。'
, '只', '不见', '去年', '的', '游伴', ',', '只', '没用', '当日', '的', '心情', '。', 
'不', '愿', '勾起', '相思', ',', '不敢', '敢出', '出门', '看', '月', '。', '偏偏',
 '月', '进', '窗', '来', ',', '害', '我', '相思', '一夜', '。']

搜索引擎模式

jieba.cut_for_search(sentence, HMM=True)
sentence: 需要进行分词的语句

import jieba
text = '也是微云,也是微云过后月光明。只不见去年的游伴,只没用当日的心情。不愿勾起相思,不敢出门看月。\
偏偏月进窗来,害我相思一夜。'

# 搜索引擎模式
result = jieba.cut_for_search(text)
print(list(result))


result ------> ['也', '是', '微云', ',', '也', '是', '微云', '过后', '月', '光明', '。', 
'只', '不见', '去年', '的', '游伴', ',', '只', '没用', '当日', '的', '心情', '。', '不愿', 
'勾起', '相思', ',', '不敢', '出门', '看', '月', '。', '偏偏', '月', '进窗', '来', ',', 
'害', '我', '相思', '一夜', '。']

细节

  1. 无论是Jieba.cut()还是jieba.cut_for_search(),返回的值均是一个可迭代的生成器,可以使用list()将生成器对象转换为列表或者遍历使用。
  2. 三者的区别
    想对比三者的区别,还是用jupyter notebook更好观察。
    Python中文分词神器---jieba_第1张图片
    因为全模式与搜索引擎模式都是以精准模式为基础设计的,所以我们主要比较全模式与精准模式以及搜索引擎模式与精准模式的不同。
  3. 全模式会将相邻的几个字,反复拼凑出词组,也就是说,在相邻几个字中,同一个字会在这几个字的词组组合中反复出现。
    比如:

月光明
精准模式: 月,光明
全模式: 月光,光明

而精准模式是将词频(由训练的数据集决定,也可人为更改)更高的词组展示出来,不会重复使用同一个字。

  1. 搜索引擎模式
    这首诗不能体现出搜索引擎与精准模式的区别,之所以展示出来,是想表明一件事,即,搜索引擎模式在大部分情况下与精准模式的结果是相同的。只有在某些特殊情况,会有部分文本与全模式类似。
    可以将搜索引擎看成两者的折中产物,既有精准模式的语义(精准模式的词组个数更少,分出的词也更符合文本的原意),又有全模式的更多可能(会对精准模式分出的长句再次切分)。所以本人更推荐使用搜索引擎模式及精准模式。

添加自定义词典

开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率。

用法: jieba.load_userdict(file_name) # file_name为自定义词典的路径

词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),用空格隔开。


上述内容引用自jieba官网

分词并返回词语在原文的起始位置

例如:
Python中文分词神器---jieba_第2张图片
注:
使用jieba.tokenize()时,使用的分词模式为精准模式。

并行分词

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

基于python自带的multiprocessing模块,目前暂>不支持windows
用法:
jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数
jieba.disable_parallel() # 关闭并行分词模式


上述内容引用自jieba官网

延迟加载

jieba采用延迟加载,"import jieba"不会立即触发词典的加载,一旦有必要才开始加载词典构建trie。如果你想手工初始jieba,也可以手动初始化。

import jieba
jieba.initialize() # 手动初始化(可选)

延迟加载机制仅在jieba的0.28版本及后续版本中生效。


上述内容整理自jieba官网

官网链接

jieba的常用功能已讲解完毕,如果想对jieba有更多的了解,可以访问其官网。
码云:https://gitee.com/fxsjy/jieba
Github: https://github.com/joelost/jieba

你可能感兴趣的:(Python,人工智能,python,中文分词,自然语言处理)