一、概念
近年来,随着NLP技术的日益成熟,开源实现的分词工具越来越多,如Ansj、盘古分词等。本文选择的是更易上手的Jieba做简单介绍。
原理:
Jieba分词结合了基于规则和基于统计这两类方法。首先基于前缀词典进行词图扫描,前缀词典是指词典中的词按照前缀包含的顺序排列,例如词典中出现了“上”,之后以“上”开头的词都会出现在这一部分,例如“上海”,进而会出现“上海市”,从而形成一种层级包含结构。如果将词看作节点,词和词之间的分词符看作边,那么一种分词方案则对应着从第一个字到最后一个字的一条分词路径。因此,基于前缀词典可以快速构建包含全部可能分词结果的有向无环图,这个图中包含多条分词路径,有向是指全部的路径都始于第一个字、止于最后一个字,无环是指节点之间不构成闭环。基于标注语料,使用动态规划的方法可以找出最大概率路径,并将其作为最终的分词结果。对于未登录词,Jieba使用了基于汉字成词的HMM模型,采用了Viterbi算法进行推导。
二、使用
1.基本分词
Jieba分词官网地址是:https://github.com/fxsjy/jieba,可以采用如下方式进行安装。
pip install jieba
Jieba提供了三种分词模式:
- 精确模式:试图将句子最精确地切开,适合文本分析。
- 全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
下面是使用这三种模式的对比。
> import jieba
>
> sent='中文分词是文本处理不可或缺的一步~'
> print('原始文本:',sent)
> seg_list=jieba.cut(sent,cut_all=True)
> print('全模式:',','.join(seg_list))
> seg_list=jieba.cut(sent,cut_all=False)
> print('精确模式:',','.join(seg_list))
> seg_list=jieba.cut_for_search(sent)
> print('搜索引擎模式:',','.join(seg_list))
结果:
原始文本: 中文分词是文本处理不可或缺的一步~
全模式: 中文,分词,是,文本,文本处理,本处,处理,不可,不可或缺,或缺,的,一步,,
精确模式: 中文,分词,是,文本处理,不可或缺,的,一步