`

庖丁分词的源码分析 (5) 最多分词和最长分词

阅读更多
在字典相同的情况下,CJKKnife得到的分词结果都是一样的,都会交给collector去处理。得到的结果就是个LinkedList,不断的next得到全部的结果。collector有MaxWordLengthTokenCollector和MostWordsTokenCollector。

MaxWordLengthTokenCollector是最长分词,意思就是说一个长的分词结果包含一个小的,那么这个小的就会被过滤掉。如分词结果是二手 汽车 二手汽车,那么最后的结果只剩下二手汽车。二手和汽车这两个都会被过滤掉。而MostWordsTokenCollector这都会保留,而且还会排好序列。而最长分词已经过滤掉了包含的,已经就是排好序的了。从这里看貌似这两个分词的区别就是最长在最多的分词基础上过滤了一下而已,当然这个前提是字典一样,其实最长和最多分词他们的字典生成也是不一样的。当然最后的结果来看确实基本上是:最长分词是在最多分词的基础上过滤了一些。
MaxWordLengthTokenCollector:

public void collect(String word, int offset, int end) {
		Token c = candidate != null ? candidate : last;
		if (c == null) {
			candidate = new Token(word, offset, end);
		} else if (offset == c.startOffset()) {
			if (end > c.endOffset()) {
				candidate = new Token(word, offset, end);
			}
		} else if (offset > c.startOffset()) {
			if (candidate != null) {
				select(candidate);
			}
			if (end > c.endOffset()) {
				candidate = new Token(word, offset, end);
			} else {
				candidate = null;
			}
		} else if (end >= c.endOffset()) {
			if (last != null && last.startOffset() >= offset
					&& last.endOffset() <= end) {
				for (Iterator/* <Token> */ iter = tokens.iterator(); iter.hasNext();) {
					last = (Token) iter.next();
					if (last.startOffset() >= offset && last.endOffset() <= end) {
						iter.remove();
					}
				}
			}
			last = null;
			candidate = new Token(word, offset, end);
		}
	}


这个代码那是相当晦涩啊。总的意思是分词的开头位置和结束位置要尽量大于之前分词,这样才尽量不会被过滤掉。

MostWordsTokenCollector:
public void collect(String word, int begin, int end) {
		LinkedToken tokenToAdd = new LinkedToken(word, begin, end);
		if (firstToken == null) {
			firstToken = tokenToAdd;
			lastToken = tokenToAdd;
			return;
		}
		if (tokenToAdd.compareTo(lastToken) > 0) {
			tokenToAdd.pre = lastToken;
			lastToken.next = tokenToAdd;
			lastToken = tokenToAdd;
			//
		} else {
			LinkedToken curTokenToTry = lastToken.pre;
			while (curTokenToTry != null
					&& tokenToAdd.compareTo(curTokenToTry) < 0) {
				curTokenToTry = curTokenToTry.pre;
			}
			if (curTokenToTry == null) {
				firstToken.pre = tokenToAdd;
				tokenToAdd.next = firstToken;
				firstToken = tokenToAdd;
			} else {
				tokenToAdd.next = curTokenToTry.next;
				curTokenToTry.next.pre = tokenToAdd;
				tokenToAdd.pre = curTokenToTry;
				curTokenToTry.next = tokenToAdd;
				
			}
		}
	}


这里是不会过滤了,但是这个排序的过程嘛,也是看的我很蛋疼,呵呵。
1
2
分享到:
评论

相关推荐

    庖丁分词jar包和dic目录

    MapReduce是一种分布式计算模型,由Google提出,常用于海量数据的并行处理,而中文分词作为数据预处理的步骤,对于后续的分析和挖掘至关重要。 标签“庖丁分词”进一步确认了我们关注的是这个特定的分词工具。庖丁...

    庖丁分词jar包

    5. **性能监控与调试**:通过日志和性能监控工具,可以评估庖丁分词的运行效率和准确性,及时发现并解决问题。 6. **社区支持与更新**:作为开源项目,庖丁分词有一个活跃的社区,用户可以从中获取帮助,同时也可以...

    庖丁分词.jar

    庖丁分词.jar 庖丁分词.jar 庖丁分词.jar 庖丁分词.jar

    lucene中文分词(庖丁解牛)庖丁分词

    5. 搜索优化:在搜索阶段,同样可以使用庖丁分词器对用户输入的查询进行预处理,提高搜索的精确度。 四、庖丁分词的高级特性 1. 自定义词典:除了预设的词典,还可以通过编程方式动态加载自定义词典,适应变化的...

    庖丁分词测试数据集 工具

    庖丁分词是一款在中文自然语言处理领域...总的来说,庖丁分词测试数据集为开发者提供了一个评估和改进分词算法的平台,通过对"data"文件中内容的深入分析和处理,可以不断提升庖丁分词在中文自然语言处理任务中的表现。

    庖丁解牛分词源码

    通过研究"庖丁解牛分词器"的源码,开发者不仅可以提升在中文分词领域的专业技能,也能深入理解Java编程、算法设计以及软件工程实践,对于从事自然语言处理和信息检索等相关领域的工作大有裨益。

    最新庖丁分词源代码(for lucene3.0)

    庖丁分词是一款知名的中文分词工具,专为Apache Lucene搜索引擎库设计和优化。Lucene是一个开源全文检索库,广泛应用于各种信息检索系统。在本压缩包中,你将找到针对Lucene 3.0版本优化的庖丁分词源代码。 1. **...

    庖丁分词归类

    5. **轻量级设计**:庖丁分词在设计上注重轻量化,适合各种规模的项目,尤其是内存和计算资源有限的环境。 6. **API接口**:提供了简单易用的Java API接口,使得开发者能够快速集成到自己的应用中,进行文本预处理...

    庖丁解牛分词 java包

    5. `dic`: 这个目录可能包含了分词词典,词典是分词器的基础,包含了大量的词汇及其相关信息,用于识别和处理文本中的词汇。 6. `src` 和 `classes`: 这两个目录分别存放源代码和编译后的字节码文件,对于深入理解...

    庖丁解牛 中文分词工具

    分词是中文文本处理的基石,因为它能将连续的汉字序列划分为具有语义意义的单元,便于后续的分析和应用。 在"庖丁解牛"中,用户可以通过运行`analyzer.bat`程序来测试和查看分词结果。这是一个便捷的交互方式,允许...

    庖丁解牛分词之自定义词库、庖丁解牛配置

    在IT行业中,分词是文本处理的一个重要环节,特别是在自然语言处理(NLP)和搜索引擎优化(SEO)等领域。"庖丁解牛分词"是一个针对中文文本的分词工具,它借鉴了中国古代庖丁解牛的故事,寓意对文本进行精细、深入的...

    庖丁解牛,一种中文分词器

    "庖丁解牛"分词器采用了先进的算法和技术来解决这个问题,包括基于词典的匹配、上下文信息分析以及统计学习方法等,使得它在处理中文文本时表现出了较高的准确性和效率。 "Lucene"是一个流行的开源全文搜索引擎库,...

    庖丁分词工具

    庖丁中文分词需要一套词典,这些词典需要统一存储在某个目录下,这个目录称为词典安装目录。词典安装目录可以是文件系统的任何目录,它不依赖于应用程序的运行目录。将词典拷贝到词典安装目录的过程称为安装词典。...

    sorlr + tomcat+ 庖丁解牛中文分词 配置文档

    标题 "sorlr + tomcat+ 庖丁解牛中文分词 配置文档" 提到的是一个关于在Apache Solr中集成Tomcat服务器,并利用庖丁解牛中文分词工具进行中文处理的配置教程。这个配置过程对于搭建支持中文搜索的Solr环境至关重要。...

    庖丁中文分词在VB.NET的使用例子方法

    `pangu_xml`变量存储了DLL文件的完整路径,这是初始化庖丁分词器时所必需的参数。 接下来,通过`PanGu.Segment.Init(pangu_xml)`进行初始化操作,加载庖丁的配置文件和模型数据。一旦初始化完成,就可以创建一个`...

    支持lucne4.X的庖丁分词jar包

    支持lucne4.X的庖丁分词jar包,自己打的jar包,保准好用

    paoding analysis 3.0.1 jar (庖丁解牛分词器)

    由于庖丁官方目前提供可下载尚不支持Lucene 3.0以上版本。因此作者对paoding进行重新编译,使其与最新Lucene 3.0.1版本适用。 Latest paoding 3.0.1 for lucene 3.0.1 使用说明: 先下载2.0.4的版本(h t t p : / ...

    lucene 中文分词 庖丁解牛

    《Lucene中文分词:庖丁解牛》 在信息技术高速发展的今天,全文搜索引擎已经成为网站内容检索不可或缺的一部分。其中,Apache Lucene作为一个开源的全文检索库,被广泛应用于各种项目中,尤其对于处理中文文本,...

    lucene3庖丁解牛中文分词器

    其中,"庖丁解牛"中文分词器因其高效和精准,成为了许多开发者的选择,尤其在支持Lucene 3版本时,它的表现更是出色。 “庖丁解牛”中文分词器是一款专为中文文本处理设计的工具,其名字来源于古代寓言故事,寓意对...

    Lucene3.0以上版本庖丁解牛分词法demo

    最新庖丁解牛分词法的使用demo,支持Lucene3.3、3.4等3.0以上版本,庖丁解牛的分词包为自己编译生成的,之前的2.0的版本不能支持Lucene3.0以上版本,所以需要从svn下载最新的庖丁解牛源码,生成jar文件(我同样已...

Global site tag (gtag.js) - Google Analytics