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
jiba中文分词原理的更多相关文章
- Elasticsearch 中文分词(elasticsearch-analysis-ik) 安装
由于elasticsearch基于lucene,所以天然地就多了许多lucene上的中文分词的支持,比如 IK, Paoding, MMSEG4J等lucene中文分词原理上都能在elasticsea ...
- Jieba分词原理与解析
https://www.jianshu.com/p/dfdfeaa7d01f 1 HMM模型 image.png 马尔科夫过程: image.png image.png 以天气判断为例:引 ...
- R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...
- 【NLP】中文分词:原理及分词算法
一.中文分词 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. ...
- python中文分词:结巴分词
中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规 ...
- jieba中文分词(python)
问题小结 1.安装 需要用到python,根据python2.7选择适当的安装包.先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py ...
- postgres中的中文分词zhparser
postgres中的中文分词zhparser postgres中的中文分词方法 基本查了下网络,postgres的中文分词大概有两种方法: Bamboo zhparser 其中的Bamboo安装和使用 ...
- 用于Lucene的各中文分词比较
对几种中文分析器,从分词准确性和效率两方面进行比较.分析器依次为:StandardAnalyzer.ChineseAnalyzer.CJKAnalyzer.IK_CAnalyzer.MIK_CAnal ...
- 中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
随机推荐
- 【JZOJ4474】【luoguP4071】排列计数
description 求有多少种长度为 n 的序列 A,满足以下条件: (1)1 ~ n 这 n 个数在序列中各出现了一次 (2)若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 ...
- HTML --- 简单的标签
HTML --- 简单的标签 html概述和基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是 ...
- spring boot项目开发中遇到问题,持续更新
1.JPA中EntityManager不能执行建表语句,提示要加事务Error:javax.persistence.TransactionRequiredException: Executing an ...
- (转)I帧,P帧,B帧 .
转:http://blog.csdn.net/abcjennifer/article/details/6577934 视频压缩中,每帧代表一幅静止的图像.而在实际压缩时,会采取各种算法减少数据的容量, ...
- overload和override二者之间的区别
overload和override三者之间的区别 Overload是重载,是有相同的方法名,但参数类型或个数彼此不同Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数.类型都与父 ...
- android studio 正式版本
注意:以下 Android Studio 下载链接全是 dl.google.com 开头的官方下载,无需tizi,建议用浏览器直接从官方原始链接下载,不要用迅雷下载.不要用迅雷下载.不要用迅雷下载,重 ...
- Android Drawable 详解(教你画画!)
参考 1.Android中的Drawable基础与自定义Drawable 2.android中的drawable资源 3.Android开发之Shape详细解读 Drawable分类 No xml标签 ...
- JS中鲜为人知的问题: [] == ![]结果为true,而 {} == !{}却为false
console.log( [] == ![] ) // true console.log( {} == !{} ) // false 在比较字符串.数值和布尔值的相等性时,问题还比较简单.但在涉及到对 ...
- 建立 CRAMFS 包
下载 cramfs 工具 从 http://prdownloads.sourceforge.net/cramfs/cramfs1.1.tar.gz下载源代码包. 把下载包拷贝到 dev_home/t ...
- tensorflow识别验证码(1)-tensorflow安装,验证码生成
什么是TensorFlow? TensorFlow是Google开发的一款神经网络的Python外部的结构包, 也是一个采用数据流图来进行数值计算的开源软件库.TensorFlow 让我们可以先绘制 ...