庖丁分词的字典文件发生改变的时候是会自动更新的,那么这个是怎么实现的呢。其实庖丁做的是比较有意思的,但是第一次看的时候很困惑。用到了递归(不断重复调用自己),和监听器模式。
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方法自己。这样新的一轮就开始,然后每到监听的时间间隔就会重新开始一轮,这样不断下去。
分享到:
相关推荐
2. **初始化**:在Java代码中,需要创建庖丁分词的实例,这通常涉及到加载词典和设置分词策略。 3. **分词处理**:调用分词API,将待处理的中文文本传入,得到分词结果。庖丁分词提供了多种分词模式,如精确模式、...
标题中的“庖丁分词jar包和dic目录”指的是一个用于中文分词处理的软件工具,其中包含了必要的jar包和字典文件。庖丁分词是基于Java开发的一个高效、可扩展的中文分词库,它借鉴了Lucene的分词技术,并在此基础上...
庖丁分词.jar 庖丁分词.jar 庖丁分词.jar 庖丁分词.jar
2. 实时更新:在大型系统中,可能需要实时更新索引,此时需考虑如何在保持服务可用的同时,有效利用庖丁分词进行增量索引。 总的来说,结合Apache Lucene与庖丁解牛,可以构建出强大的中文全文检索系统。在实际应用...
2. **字典构建**:庖丁解牛分词器的核心在于它的词典,包含了大量常用词汇和专有名词。词典的构建需要考虑词汇的频度、词性、多音字等因素,以确保在分词时能快速找到正确的词汇组合。 3. **动态匹配算法**:源码中...
2. **分词操作**:使用庖丁分词对文本进行分词处理。 3. **结果比对**:将分词结果与预设的正确答案进行对比。 4. **性能计算**:根据比对结果计算准确率、召回率和F1值。 5. **参数调优**:根据评估结果调整分词...
庖丁分词采用了基于字典匹配、动态规划等方法,结合用户自定义规则,能够灵活处理各类文本,适应不同领域的分词需求。 4. **源代码分析**: 在压缩包中的`paoding-analysis`目录下,包含了庖丁分词的核心源代码。...
这种方式为开发人员提供了一个便捷的测试平台,使他们能够即时观察和分析分词效果,便于调试和优化分词算法。同时,非技术用户也能通过直观的交互界面来理解分词过程,体验从文本到词汇的转换。 软件的运行离不开...
9. **持续更新**:随着版本迭代,庖丁分词不断优化和改进,引入新的特性和功能,以应对中文分词领域的挑战。 总之,"庖丁分词归类"是一个强大的Java分词工具,适用于需要对中文文本进行深入处理的各种应用场景,如...
2. **分词模式**:设置不同的分词策略,比如精确模式、全模式、简模式等,以适应不同场景的需求。 3. **停用词表**:排除某些常见的无意义词汇,如“的”、“和”、“在”等,以减少无用信息。 4. **用户词典优先级*...
"庖丁解牛分词" 是一款针对中文文本处理的分词工具,主要适用于Java环境。这个工具包的名称形象地借用中国古代故事“庖丁解牛”,寓意对文本的精细处理,如同庖丁对牛肉的熟练分解。在Java开发中,分词是自然语言...
庖丁中文分词需要一套词典,这些词典需要统一存储在某个目录下,这个目录称为词典安装目录。词典安装目录可以是文件系统的任何目录,它不依赖于应用程序的运行目录。将词典拷贝到词典安装目录的过程称为安装词典。...
"庖丁解牛"分词器采用了先进的算法和技术来解决这个问题,包括基于词典的匹配、上下文信息分析以及统计学习方法等,使得它在处理中文文本时表现出了较高的准确性和效率。 "Lucene"是一个流行的开源全文搜索引擎库,...
标题 "sorlr + tomcat+ 庖丁解牛中文分词 配置文档" 提到的是一个关于在Apache Solr中集成Tomcat服务器,并利用庖丁解牛中文分词工具进行中文处理的配置教程。这个配置过程对于搭建支持中文搜索的Solr环境至关重要。...
支持lucne4.X的庖丁分词jar包,自己打的jar包,保准好用
2. **模型更新**:中文语言随时代发展而变化,因此定期更新庖丁的词典和模型是必要的,以确保分词的准确性。 3. **自定义词典**:对于特定领域或含有大量专业术语的文本,可以添加自定义词典,以提高分词的专指度。 ...
由于庖丁官方目前提供可下载尚不支持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 : / ...
2. **字典支持**:分词效果很大程度上依赖于字典的质量。庖丁解牛提供了丰富的字典资源,涵盖了各类常见词汇,同时支持用户自定义字典,以满足不同场景的需求。 3. **智能分析**:除了基础的词语切分,庖丁解牛还...
最新庖丁解牛分词法的使用demo,支持Lucene3.3、3.4等3.0以上版本,庖丁解牛的分词包为自己编译生成的,之前的2.0的版本不能支持Lucene3.0以上版本,所以需要从svn下载最新的庖丁解牛源码,生成jar文件(我同样已...
2. HanLP:由百度公司开源的自然语言处理工具包,包含分词、词性标注、命名实体识别等功能,分词效果优秀。 3. Snowball Analyzer:基于Lucene的分词器,支持多国语言,但对中文支持有限,需配合其他中文分词库使用...