`

庖丁分词的源码分析 (4) 分词过程

阅读更多
庖丁分词的主要分词实现是CJKKnife,主要的方法是dissect方法。但是这个方法300多行,我不想全部贴出来。我选一些重点说说。dissect首先会用到assignable方法,其实就是找到要分词的对象,这里主要是中文。遇到不是中文的就强行截断了,后面的再继续开始。

	/**
	 * 分解以CJK字符开始的,后可带阿拉伯数字、英文字母、横线、下划线的字符组成的语句
	 */
	public int assignable(Beef beef, int offset, int index) {
		char ch = beef.charAt(index);
		if (CharSet.isCjkUnifiedIdeographs(ch))
			return ASSIGNED;
		if (index > offset) {
			if (CharSet.isArabianNumber(ch) || CharSet.isLantingLetter(ch)
					|| ch == '-' || ch == '_') {
				return POINT;
			}
		}
		return LIMIT;
	}



GO_UNTIL_LIMIT: while (true) {
			switch (assignable(beef, offset, limit)) {
			case LIMIT:
				break GO_UNTIL_LIMIT;
			case POINT:
				if (point == -1) {
					point = limit;
				}
			}
			limit++;
		}


如果从字典找到有:
if (curSearch.isHit()) {

					if (!word.isNoise()) {
						collector.collect(word.getText(), curSearchOffset,
							curSearchEnd);
					}
					}


把这个放到结果容器里去,当然这个容器还会再处理,就是最长和最多的分词实现,这个下篇文章会细说。
其实这个已经是分词的主要实现了,去找字典,找到的就切分出来,找不到字典的怎么办:


dissectIsolated(collector, beef, maxDicWordEnd, offsetLimit);



这个方法执行的就是两个字一分而已。

当然还有处理“”《》这些特殊情况的:
int len = limit - offset;
		if (len > 2 && len != maxDicWordLength
				&& shouldBeWord(beef, offset, limit)) {
			collector.collect(beef.subSequence(offset, limit).toString(),
					offset, limit);
		}

这样其实整个过程就完了,但是如何尽早确定这个词不在字典里,这个很关键,这个就用到了上篇文章说的,字典查询返回的几个状态了:
// 若isolatedFound==true,表示词典没有该词语
				boolean isolatedFound = curSearch.isUndefined();

				// 若isolatedFound==false,则通过Hit的next属性检视词典没有beef的从offset到curWordEnd
				// + 1位置的词
				// 这个判断完全是为了减少一次词典检索而设计的,
				// 如果去掉这个if判断,并不影响程序的正确性(但是会多一次词典检索)
				if (!isolatedFound && !curSearch.isHit()) {
					isolatedFound = curSearchEnd >= limit
							|| beef.charAt(curSearchEnd) < curSearch.getNext()
									.charAt(curSearchLength);
				}
				// 2)
				// 词汇表中没有该词语,且没有以该词语开头的词汇...
				// -->将它记录为孤立词语
				if (isolatedFound) {
分享到:
评论

相关推荐

    庖丁分词jar包和dic目录

    - `dic`:这是一个目录,很可能包含了庖丁分词的默认字典文件,这些字典用于指导分词过程,确定单词的边界。 综合以上信息,我们可以了解到庖丁分词是一个在Java环境下运行,适用于大规模文本处理的中文分词工具,...

    庖丁分词jar包

    在压缩包文件名称“paoding-analysis-2.0.0”中,“paoding”是庖丁分词的英文名称,“analysis”可能指的是其分析功能,尤其是中文文本分析。“2.0.0”表示这是该软件的第二个主要版本,版本号中的“0.0”可能表示...

    庖丁分词.jar

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

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

    3. 初始化分词器:在Lucene的索引过程中,需要实例化庖丁分词器,并设置相应的参数,如词典路径、分词模式等。 4. 分词处理:在索引文档时,先用庖丁分词器对中文文本进行分词,然后将分词结果转换成Lucene的Term...

    庖丁解牛分词源码

    4. **Java编程**:作为Java实现的分词工具,庖丁解牛分词器利用了Java的面向对象特性,可能包含了大量的类和接口设计。例如,它可能会有词典类、分词器类、匹配算法类等,这些类之间的关系和协作是理解源码的关键。 ...

    庖丁分词测试数据集 工具

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

    庖丁解牛 中文分词工具

    "庖丁解牛"是一款专为中文处理设计的分词工具,其版本2.0.4-alpha2提供了更稳定和高效的分词体验。这个工具的核心功能是将中文文本拆分成有意义的词语,这对于中文信息处理、自然语言理解和搜索引擎优化等场景至关...

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

    4. **源代码分析**: 在压缩包中的`paoding-analysis`目录下,包含了庖丁分词的核心源代码。通过阅读源代码,你可以了解其内部工作原理,如分词算法、字典构建、动态策略等,这对于理解中文分词技术,以及自定义和...

    庖丁分词归类

    4. **词性标注**:除了基本的分词功能,还提供了词性标注功能,帮助识别每个词的语法角色,如名词、动词、形容词等,为语义分析提供辅助。 5. **轻量级设计**:庖丁分词在设计上注重轻量化,适合各种规模的项目,...

    庖丁解牛分词 java包

    4. `paoding-analysis.jar`: 这是核心的Java类库文件,包含了庖丁解牛分词的实现代码,开发者可以通过导入这个JAR包来调用其分词功能。 5. `dic`: 这个目录可能包含了分词词典,词典是分词器的基础,包含了大量的...

    庖丁分词工具

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

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

    4. **用户词典优先级**:决定是否优先使用自定义词典中的词汇进行分词。 5. **其他参数**:如是否开启歧义消解、是否考虑词语频率等。 在实际应用中,开发者通常会根据具体任务需求来调整这些配置,以达到最佳的...

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

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

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

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

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

    4. **庖丁解牛中文分词**: 庖丁解牛是一个流行的中文分词库,主要用于对中文文本进行分词处理,以适应搜索引擎的需求。它采用了高效的分词算法,能够快速准确地将中文句子拆分成单词或短语,为Solr的中文搜索提供...

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

    综上所述,庖丁中文分词库在VB.NET环境下提供了灵活且强大的中文文本分析能力,适用于多种应用场景。开发者应根据具体需求合理配置参数,优化性能,并注意维护模型的时效性和准确性,以充分发挥其在自然语言处理领域...

    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 中文分词 庖丁解牛

    4. PKUAnnotator:北京大学开发的中文分词系统,具有较高的准确率和召回率。 五、选择与优化 不同的分词器有各自的优点和适用场景,例如IK Analyzer适合通用的网页内容,HanLP则在复杂文本处理上有优势。在实际应用...

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

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

    lucene3庖丁解牛中文分词器

    3. **智能分析**:除了基础的词语切分,庖丁解牛还具备词语消歧、新词发现、关键词提取等高级功能,能够更好地适应互联网上的海量信息变化。 4. **易用性**:对于开发者来说,庖丁解牛的API设计简洁明了,易于集成...

Global site tag (gtag.js) - Google Analytics