Jieba分词包(三)——基于词频最大切分组合

Jieba分词包(三)——基于词频最大切分组合

在前面,我们已经知道dict中所有的单词和词频信息已经存在了一个trie树中,并且需要分词的句子已经构建成了一个DAG图,构建的过程也运用了dict。那么这次我们来说如何基于每句话的DAG图,找到一个组合路径,使得该组合最合理(即打分最高)?

我们直接针对Jieba分词的源代码来解释,其中已经有了很多注释:

def calc(sentence,DAG,idx,route):  #动态规划,计算最大概率的切分组合
	#输入sentence是句子,DAG句子的有向无环图
    N = len(sentence)  #句子长度
    route[N] = (0.0,'')
    for idx in xrange(N-1,-1,-1):  #和range用法一样,不过还是建议使用xrange
		#可以看出是从后往前遍历每个分词方式的

		#下面的FREQ保存的是每个词在dict中的频度得分,打分的公式是 log(float(v)/total),其中v就是被打分词语的频数
		 #FREQ.get(sentence[idx:x+1],min_freq)表示,如果字典get没有找到这个key,那么我们就使用最后的frequency来做
		 #由于DAG中是以字典+list的结构存储的,所以确定了idx为key之外,
		 #仍然需要for x in DAG[idx]来遍历所有的单词结合方式(因为存在不同的结合方法,例如“国”,“国家”等)
		 #以(频度得分值,词语最后一个字的位置)这样的tuple保存在route中
        candidates = [ ( FREQ.get(sentence[idx:x+1],min_freq) + route[x+1][0] , x ) for x in DAG[idx] ]
        route[idx] = max(candidates)

整体的思路就是使用动态规划方法,从后往前遍历,选择一个频度得分最大的一个切分组合。

那么可能会问为何是从后往前实现动态规划呢?因为汉语句子的重心经常落在后面, 就是落在右边, 因为通常情况下形容词太多, 后面的才是主干, 因此, 从右往左计算, 正确率要高于从左往右计算, 这个类似于逆向最大匹配!

http://ddtcms.com/blog/archive/2013/2/4/69/jieba-fenci-suanfa-lijie/

http://blog.csdn.net/rav009/article/details/12310077

时间: 2024-08-28 14:25:10

Jieba分词包(三)——基于词频最大切分组合的相关文章

Haystack全文检索框架中使用jieba分词包

1.安装jieba pip install jieba 2.引入jieba cd 到haystack安装目录backends下, 新建文件ChineseAnalyzer.py,键入内容 import jieba from whoosh.analysis import Tokenizer, Token class ChineseTokenizer(Tokenizer): def __call__(self, value, positions=False, chars=False, keeporig

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse

jieba分词算法使用

第一步:先导入jieba分词包 1 import jieba 2 import jieba.analyse 3 import jieba.posseg 第二步:使用jieba分词的方法 常用的有:jieba.cut().jieba.cut_for_search()和jieba.posseg.cut()-----------前者是无词性分词,中间为浏览器搜索,后者是有词性分词 其中jieba.cut()中除了需要加入被拆分的字符串还可以加入cut_all参数,true为全模式,false为精准模式

jieba分词的词性标注

号称"做最好的Python中文分词组件"的jieba分词是python语言的一个中文分词包.它的特点有: 支持三种分词模式: ? 精确模式,试图将句子最精确地切开,适合文本分析: ? 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义: ? 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词. 支持繁体分词 支持自定义词典 Python 2.x 下的安装 全自动安装:easy_install jieba 或者 pip inst

python jieba分词工具

源码地址:https://github.com/fxsjy/jieba 演示地址:http://jiebademo.ap01.aws.af.cm/ 特点 1,支持三种分词模式: a,精确模式,试图将句子最精确地切开,适合文本分析:     b,全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义:     c,搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词. 2,支持繁体分词 3,支持自定义词典 安装 1,Python 2.x 下的安

Python自然语言处理学习——jieba分词

jieba--"结巴"中文分词是sunjunyi开发的一款Python中文分词组件,可以在Github上查看jieba项目. 要使用jieba中文分词,首先需要安装jieba中文分词,作者给出了如下的安装方法: 1.全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba 2.半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py

文本挖掘——jieba分词

python 结巴分词(jieba)学习 特点 1,支持三种分词模式: a,精确模式,试图将句子最精确地切开,适合文本分析:     b,全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义:     c,搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词. 2,支持繁体分词 3,支持自定义词典 安装 1,Python 2.x 下的安装 全自动安装 :easy_install jieba 或者 pip install jieba 半自动安

jieba分词工具的使用

烦烦烦( ˇ?ˇ ) http://www.oschina.net/p/jieba/  搬运工..... jieba "结巴"中文分词:做最好的Python中文分词组件 "Jieba". Feature 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析: 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义: 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词. 支持繁体分词 支持自定义词典

python结巴(jieba)分词

python结巴(jieba)分词 一.特点 1.支持三种分词模式: (1)精确模式:试图将句子最精确的切开,适合文本分析. (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义. (3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词.2.支持繁体分词3.支持自定义词典 二.实现 结巴分词的实现原理主要有一下三点:(1)基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG).(2)采用了动态