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

时间: 2024-08-29 17:41:05

jiba中文分词原理的相关文章

中文分词技术(中文分词原理)

一.       为什么要进行中文分词? 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. Lucene中对中文的处理是基于自动切分的单字切分,或者二元切分.除此之外,还有最大切分(包括向前.向后.以及前后相结合).最少切分.全切分等等. 二.       中文分词技术的分类 我们讨论的分词算法可分为三大类:基于字典.词库匹配的分词方法:基于词频度统计的分词方法

中文分词原理和实现

三大主流分词方法:基于词典的方法.基于规则的方法和基于统计的方法. 1.基于规则或词典的方法 定义:按照一定策略将待分析的汉字串与一个"大机器词典"中的词条进行匹配,若在词典中找到某个字符串,则匹配成功. 按照扫描方向的不同:正向匹配和逆向匹配 按照长度的不同:最大匹配和最小匹配 1.1正向最大匹配思想MM 从左向右取待切分汉语句的m个字符作为匹配字段,m为大机器词典中最长词条个数. 查找大机器词典并进行匹配: 若匹配成功,则将这个匹配字段作为一个词切分出来. 若匹配不成功,则将这个匹

中文分词原理及工具

原理 中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词.表面上看,分词其实就是那么回事,但分词效果好不好对信息检索.实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的算法的. 中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,需要人为切分.根据其特点,可以把分词算法分为四大类: 基于规则的分词方法 基于统计的分词方法 基于语义的分词方法 基于理解的分词方

Elasticsearch 中文分词(elasticsearch-analysis-ik) 安装

由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsearch上使用.当然前提是有elasticsearch的插件. 至于插件怎么开发,这里有一片文章介绍:http://log.medcl.net/item/2011/07/diving-into-elasticsearch-3-custom-analysis-plugin/暂时还没时间看,留在以后仔细研

php+中文分词scws+sphinx+mysql打造千万级数据全文搜索

Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎.意图为其他应用提供高速.低空间占用.高结果 相关度的全文搜索功能.Sphinx可以非常容易的与SQL数据库和脚本语言集成.当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据.Sphinx创建索引的速度为:创建100万条记录的索引只需3-4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒.Sphinx的

在Hadoop上运行基于RMM中文分词算法的MapReduce程序

原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词算法的MapReduce程序 23条回复 我知道这个文章标题很“学术”化,很俗,让人看起来是一篇很牛B或者很装逼的论文!其实不然,只是一份普通的实验报告,同时本文也不对RMM中文分词算法进行研究.这个实验报告是我做高性能计算课程的实验里提交的.所以,下面的内容是从我的实验报告里摘录出来的,当作是我学

Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好).如不清楚配置可看<Hadoop之词频统计小实验初步配置> 3)本文由于过长,无法一次性上传.其相邻相关的博文,可参见<Hadoop的改进实验(中文分词词频统计及英文词频统计) 博文目录结构>,以阅览其余三篇剩余内容文档. (五)单机伪分布的英文词频统计Python&Streamin

中文分词与搜索引擎

看到题目就知道我要说什么了,这个话题好像已经被讨论过n次了,看雅虎搜索blog上在06年就有过专题系列文章,地址为:http://ysearchblog.cn/2006/07/post_16.html,文中详细的介绍了有关中文分词的意义,算法,跟搜索引擎的关系等等.个人认为文章质量非常不错.其实我所写的也不外乎这些东西,可我为什么还要写呢?是因为我花了将近一周的时间来理解中文分词,收集有关资料,为了不让努力白费,我还是总结一下吧. 一.为什么要中文分词? 对啊,为何要分词,不分词行不行?要讨论这

模式识别之中文分词

概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 0. 前言 这是一篇关于贝叶斯方法的科普文,我会尽量少用公式,多用平白的语言叙述,多举实际例子.更严格的公式和计算我会在相应的地方注明参考资料.贝叶斯方法被证明是