1、中文分词(Chinese Word Segmentation)
和英文不同,中文词之间没有空格,所以实现中文搜索引擎,比英文多了一项分词的任务。例如,英文句子“I am a student.”,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student 是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,也称切词。
最常见的中文分词算法可以分为三大类:①基于字符串匹配的分词方法、②基于理解的分词方法、③基于统计的分词方法
下面就具体介绍下这三类分类算法:
基于字符串匹配的分词方法:这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)
1)正向最大匹配法(由左到右的方向)
2)逆向最大匹配法(由右到左的方向):
3)最少切分(使每一句中切出的词数最小)
4)双向最大匹配法(进行由左到右、由右到左两次扫描)
基于理解的分词方法:这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。
基于统计的分词方法:给出大量已经分词的文本,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。例如最大概率分词方法和最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法。
2、jieba分词特点
①支持三种分词模式 : 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
②支持繁体分词
③支持自定义词典
④MIT授权协议
3、jieba分词基本算法
①基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图{位置,[有效词的末尾索引]},如下图:
上海大众→DAG: {0: [0, 1, 3], 1: [1], 2: [2, 3, 5], 3: [3] (例:0: [0, 1, 3]可理解为上:上(0),上海(1),上海大众(3))
②根据有向无环图的生成的词切片,计算出每一种可能分词组合的最大概率,这里用到了一个动态规划的算法,从句尾开始向前推进,最后可以得到一个基于字典中每个词的频率而得到的最优解,即得到基于词频的最大切分组合。如下图:(其中最大切分-17.0123*是对“上海大众”这个词的概率求log后的值)
route:{0:(-17.012343323,3), 1:(-20.205012324,1), 2:(-12.202623572,3), 3:(-9.735563572,3), 4:(0.0,'')}。最后得出route概率-17.012343323,“上海大众”即为最大切分。
③结巴对于字母和数字的处理方法是:对于route得出单个字节的词,先全部连成一个buf 然后:1.(非隐马尔科夫)组合在一起,并输出 2.隐马尔科夫(HMM) 比较在词典中是否有buf,如果有,则分开输出
4、jieba分词的具体流程图
5、代码示例
input数据的前十行的查看结果:
最终得到的输出结果:
6、jieba分词源码下载地址:https://github.com/fxsjy/jieba