`

庖丁分词的源码分析(2) 自动更新字典

阅读更多
庖丁分词的字典文件发生改变的时候是会自动更新的,那么这个是怎么实现的呢。其实庖丁做的是比较有意思的,但是第一次看的时候很困惑。用到了递归(不断重复调用自己),和监听器模式。


final DictionariesCompiler compiler = (DictionariesCompiler) compilerClass
					.newInstance();
			new Function() {
				public void run() throws Exception {
					// 编译词典-对词典进行可能的处理,以符合分词器的要求
					if (compiler.shouldCompile(p)) {
						Dictionaries dictionaries = readUnCompiledDictionaries(p);
						Paoding tempPaoding = createPaodingWithKnives(p);
						setDictionaries(tempPaoding, dictionaries);
						compiler.compile(dictionaries, tempPaoding, p);
					}

					// 使用编译后的词典
					final Dictionaries dictionaries = compiler
							.readCompliedDictionaries(p);
					setDictionaries(finalPaoding, dictionaries);

					// 启动字典动态转载/卸载检测器
					// 侦测时间间隔(秒)。默认为60秒。如果设置为0或负数则表示不需要进行检测
					String intervalStr = getProperty(p,
							Constants.DIC_DETECTOR_INTERVAL);
					int interval = Integer.parseInt(intervalStr);
					if (interval > 0) {
						dictionaries.startDetecting(interval,
								new DifferenceListener() {
									public void on(Difference diff)
											throws Exception {
										dictionaries.stopDetecting();
										// 此处调用run方法,以当检测到**编译后**的词典变更/删除/增加时,
										// 重新编译源词典、重新创建并启动dictionaries自检测
										run();
									}
								});
					}
				}
			}.run();


首先我们看到一个function,他有个run方法,里面有个监听器,当条件成立,这个监听器会执行这个run方法。run方法的作用是设置字典对象。
我们在run方法里改变的是finalPaoding,但是finalPaoding=Paoding。所以我们改变的就是自身。

当然这里的run方法不是直接去和监听器打交道,中间有个Detector,run方法把Listener和检查的时间间隔都设置到Detector里去,剩下的事情就有Detector来完成了。

Detector会怎么做呢。他会执行自己的start方法:

public void start(boolean daemon) {
		if (lastSnapshot == null) {
			lastSnapshot = flash();
		}
		thread = new Thread(this);
		thread.setDaemon(daemon);
		thread.start();
	}


这个start方法会新创建个自己的线程,再来看看Detector的run方法:他会
listener.on(diff);
就是触发监听器。这个监听器的on方法在最原始的run方法中已经定义了,其实就是调用run方法自己。这样新的一轮就开始,然后每到监听的时间间隔就会重新开始一轮,这样不断下去。
分享到:
评论

相关推荐

    庖丁分词jar包

    2. **初始化**:在Java代码中,需要创建庖丁分词的实例,这通常涉及到加载词典和设置分词策略。 3. **分词处理**:调用分词API,将待处理的中文文本传入,得到分词结果。庖丁分词提供了多种分词模式,如精确模式、...

    庖丁分词jar包和dic目录

    标题中的“庖丁分词jar包和dic目录”指的是一个用于中文分词处理的软件工具,其中包含了必要的jar包和字典文件。庖丁分词是基于Java开发的一个高效、可扩展的中文分词库,它借鉴了Lucene的分词技术,并在此基础上...

    庖丁分词.jar

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

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

    2. 实时更新:在大型系统中,可能需要实时更新索引,此时需考虑如何在保持服务可用的同时,有效利用庖丁分词进行增量索引。 总的来说,结合Apache Lucene与庖丁解牛,可以构建出强大的中文全文检索系统。在实际应用...

    庖丁解牛分词源码

    2. **字典构建**:庖丁解牛分词器的核心在于它的词典,包含了大量常用词汇和专有名词。词典的构建需要考虑词汇的频度、词性、多音字等因素,以确保在分词时能快速找到正确的词汇组合。 3. **动态匹配算法**:源码中...

    庖丁分词测试数据集 工具

    2. **分词操作**:使用庖丁分词对文本进行分词处理。 3. **结果比对**:将分词结果与预设的正确答案进行对比。 4. **性能计算**:根据比对结果计算准确率、召回率和F1值。 5. **参数调优**:根据评估结果调整分词...

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

    庖丁分词采用了基于字典匹配、动态规划等方法,结合用户自定义规则,能够灵活处理各类文本,适应不同领域的分词需求。 4. **源代码分析**: 在压缩包中的`paoding-analysis`目录下,包含了庖丁分词的核心源代码。...

    庖丁分词归类

    9. **持续更新**:随着版本迭代,庖丁分词不断优化和改进,引入新的特性和功能,以应对中文分词领域的挑战。 总之,"庖丁分词归类"是一个强大的Java分词工具,适用于需要对中文文本进行深入处理的各种应用场景,如...

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

    2. **分词模式**:设置不同的分词策略,比如精确模式、全模式、简模式等,以适应不同场景的需求。 3. **停用词表**:排除某些常见的无意义词汇,如“的”、“和”、“在”等,以减少无用信息。 4. **用户词典优先级*...

    庖丁解牛分词 java包

    "庖丁解牛分词" 是一款针对中文文本处理的分词工具,主要适用于Java环境。这个工具包的名称形象地借用中国古代故事“庖丁解牛”,寓意对文本的精细处理,如同庖丁对牛肉的熟练分解。在Java开发中,分词是自然语言...

    庖丁分词工具

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

    庖丁解牛 中文分词工具

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

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

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

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

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

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

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

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

    2. **模型更新**:中文语言随时代发展而变化,因此定期更新庖丁的词典和模型是必要的,以确保分词的准确性。 3. **自定义词典**:对于特定领域或含有大量专业术语的文本,可以添加自定义词典,以提高分词的专指度。 ...

    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 : / ...

    lucene3庖丁解牛中文分词器

    2. **字典支持**:分词效果很大程度上依赖于字典的质量。庖丁解牛提供了丰富的字典资源,涵盖了各类常见词汇,同时支持用户自定义字典,以满足不同场景的需求。 3. **智能分析**:除了基础的词语切分,庖丁解牛还...

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

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

    lucene 中文分词 庖丁解牛

    2. HanLP:由百度公司开源的自然语言处理工具包,包含分词、词性标注、命名实体识别等功能,分词效果优秀。 3. Snowball Analyzer:基于Lucene的分词器,支持多国语言,但对中文支持有限,需配合其他中文分词库使用...

Global site tag (gtag.js) - Google Analytics