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版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
随机推荐
- 微信公众号支付出现:“当前页面的URL未注册”
微信公众号H5调起支付时,点击支付按钮出现“当前页面的URL未注册”的提示.解决办法:由于2017年8月1日微信官方把关于支付的信息转移到了商户平台:公众平台微信支付公众号支付授权目录.扫码支付回调U ...
- Unix、Linux、Windows操作系统的区别
1.操作区别 原文地址: https://blog.csdn.net/qq_41026740/article/details/96018808 linux区分大小写,windows在dos界面命令下不 ...
- Batch - C:\Progra~1是什么意思
就是那种DOS下的8.3的规范,可以这样写 C:\Progra~1也可以这样写全名字的 "C:\Program File",因为这个路径中的文件夹名有空格,要用两个英文输入法下的双 ...
- [JZOJ4665] 【GDOI2017模拟7.21】数列
题目 题目大意 给你一个数列,让你找到一个最长的连续子序列,满足在添加了至多KKK个数之后,能够变成一条公差为DDD的等差数列. 思考历程 一眼看上去似乎是一道神题-- 没有怎么花时间思考,毕竟时间都 ...
- Bootstrap FileInput.js + springmvc uploadFile
下载FileInput.js http://plugins.krajee.com/file-input/demo https://github.com/kartik-v/bo ...
- thinkphp 正则路由
正则路由也就是采用正则表达式定义路由的一种方式,依靠强大的正则表达式,能够定义更灵活的路由规则. 路由表达式支持的正则定义必须以“/”开头,否则就视为规则表达式.也就是说如果采用: '#^blog\/ ...
- python实现全局配置和用户配置文件
一.文件目录格式 二.代码 1.conf.__init__.py import importlib import os from conf import gsettings class Setting ...
- ssm下使用分页插件PageHelper进行分页
1. 导入maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId ...
- FastJson使用方法
FastJson是阿里的一款开源框架,用来快速实现Java的序列化和反序列化. 官方地址:https://github.com/alibaba/fastjson 使用方法演示: 下载jar包,使用ID ...
- tcp通信,解决断包、粘包的问题
1.TCP和UDP的区别 TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务器端)都要有一一成对的socket ...