jiba中文分词原理

中文分词就是将一个汉字序列分成一个一个单独的词。

现有的分词算法有三大类:

基于字符串匹配的分词:机械分词方法,它是按照一定的策略将待分析的字符串与一个充分大的机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功。

基于理解的分词方法:通过让计算机模拟人对句子的理解,达到识别词的效果,特点就是在分词的同时进行句法,语义的分析,利用句法信息和语义信息来处理歧义现象。通常包括三个部分:分词子系统,句法语义子系统,总控部分。

基于统计的分词方法:给出大量的已经分词的文本,利用统计机器学习模型学习词语切分的规律称为训练,从而实现对未知文本的切分,例如最大概率分词方法和最大熵分词方法等。随着大规模语料库的建立,统计机器学习方法的研究和发展,基于统计的中文分词方法渐渐成为了主流方法。

 

jieba支持三种分词模式:

1.精确分词,试图将句子最精确的切开,适合文本分析。

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

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

 

基本原理:

1.基于字典树trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)

trie的详细介绍:http://blog.csdn.net/Hackbuteer1/article/details/7964147

DAG参考:http://book.51cto.com/art/201106/269048.htm

     jieba分词自带了一个叫做dict.txt的词典,里面有2万多条词,包含了次条出现的次数和词性,这个一个条原理就是把这2万多条词语,放到一个trie树中,而trie树是 有名的前缀树,也就是说一个词语的前面几个字一样,就表示他们具有相同的前缀。具有查找速度快的优势。

2.采用了动态规划查找最大概率路径,找出基于词频的最大切分组合

     动态规划中,先查找待分词句子中已经切分好的词语,对该词语查找该词语出现的频率,如果没有该词,就把词典中出现频率最小的那个词语的频率作为该词的频率。对句子从右到左反向极端最大概率,因为从右往左计算,正确率要高于从左往右计算,因为汉语句子的中心在后面,就是落在右边。依次类推,最后得到最大概率路径,得到最大概率的切合组合。

3.对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

     未登录词就是词典dict.txt中没有记录的词,上面说了,删除所有dict.txt中的所有词语,结巴分词一样可以分词。

     看维基百科:http://zh.wikipedia.org/wiki/%E7%BB%B4%E7%89%B9%E6%AF%94%E7%AE%97%E6%B3%95 维特比算法

结巴分词过程:

1.加载字典,生成trie树。

2.给定待分词的句子,使用正则获取连续的中文字符和英文字符,切分成短语列表,对每个短语进行DAG(查字典)和动态规划,得到最大概率路径,对DAG中的那些没有在字典中查到的字,组合成一个新的片段短语,使用HMM模型进行分词,也就是说识别新词,即识别字典外的新词。

3.使用python的yield语法生成另一个词语生成器。

 

参考文档:http://blog.csdn.net/john_xyz/article/details/54645527

posted @ 2017-12-23 10:58  老A队长  阅读(1945)  评论(0编辑  收藏  举报