vlambda博客
学习文章列表

jieba:做最好的 Python 中文分词组件,了解一下!

接下来继续向机器学习和人工智能方向学习,在自然语言处理中,分词是一项最基本的技术。中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语以字为基本书写单位,词语之间没有明显的区分标记,需要人为切分。现在开源的中文分词工具有SnowNLP、THULAC、Jieba和HanLP等,都还在不断更新和维护过程中。

算法

今天学习的是Jieba,一个立志于做最好的 Python 中文分词组件,主要涉及的算法如下:
  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;
  • 对于未登录词,采用基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。

中文分词技术是中文信息处理的基础,有着极其广泛的实际应用,比如:汉语语言理解、机器翻译、语音合成、自动分类、自动摘要、数据挖掘和搜索引擎等,都需要对中文信息进行分词处理。因此,一个中文分词算法的好坏,会对其后续的应用产生极大的影响。

特点

Jieba分词支持4种模式分词:精准模式、全模式、搜索引擎模式及paddle模式。
  • 精确模式:试图将句子最精确地切开,适合文本分析;

  • 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

  • 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

  • paddle模式:利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。

注意:paddle模式使用需安装paddlepaddle-tiny:

pip install paddlepaddle-tiny==1.6.1

目前paddle模式支持jieba v0.40及以上版本,如果是jieba v0.40以下版本,升级jieba:

pip install jieba --upgrade
此外,Jieba还支持中文繁体分词、自定义词典等。

安装

官网给出了多种安装方式,参考如下:
第四种分词模式,安装失败:( 目前还没找到解决方法

jieba:做最好的 Python 中文分词组件,了解一下!

Demo

1、jieba的分词功能演示

常用的jieba分词常用的函数如下:

jieba.Tokenizer(dictionary=DEFAULT_DICT) 是新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射,通过源码可以看到:

使用默认分词器,演示三种模式:

import jieba
text = '天青色等烟雨而我在等你,炊烟袅袅升起隔江千万里'# 精准模式,cut_all默认Falselist_mode1 = jieba.lcut(text)for i in list_mode1: print(i, end="/")
print()# 全模式list_mode2 = jieba.lcut(text, cut_all=True)for i in list_mode2: print(i, end="/")
print()# 搜索引擎模式list_mode3 = jieba.lcut_for_search(text)for i in list_mode3: print(i, end="/")
天/青色/等/烟雨/而/我/在/等/你/,/炊烟袅袅/升起/隔江/千万里/天青/青色/等/烟雨/而/我/在/等/你/,/炊烟/炊烟袅袅/袅袅/升起/隔/江/千万/千万里/万里/天/青色/等/烟雨/而/我/在/等/你/,/炊烟/袅袅/炊烟袅袅/升起/隔江/千万/万里/千万里/
从结果可以看出,对于文本类型,精准模式分词是最准确的。
2、自定义分词功 能演示
如果,想要调整修改词典,使用:
jieba.add_word('我在等你')jieba.del_word('炊烟袅袅')
天/青色/等/烟雨/而/我在等你/,/炊烟/袅袅/升起/隔江/千万里/天青/青色/等/烟雨/而/我在等你/,/炊烟/袅袅/升起/隔/江/千万/千万里/万里/天/青色/等/烟雨/而/我在等你/,/炊烟/袅袅/升起/隔江/千万/万里/千万里/
从结果可以看出,add_word 修改为成一个词输出,del_word 修改为多个词。  

就到这~,接下来再学习和梳理词性标注、自定义词典、关键词抽取等内容。