`

庖丁分词的源码分析

    博客分类:
  • java
阅读更多
在网上也看到了不少庖丁分词的使用说明,但是源码分析比较少。但是我也不想死板的一步步的把代码说一遍,这个多debug几次就ok了。我想说说比较关键或有意思的地方。

1 庖丁只要是同一个配置文件就会是同一个庖丁对象,所以其实你可以放心的new。

2 庖丁的配置文件改变他是会去检查的,可以通过设置paoding.dic.detector.interval这个来设置检查的时间间隔。

3 庖丁使用的不是原始的字典文件,而是处理过后放到.compiled文件夹,原始的分散多个的字典文件也会被合成少数几个文件,主要的一个是vocabulary,一个是noise,vocabulary是主要的查找对象,noise则是要排除的。

4 庖丁有两种处理机制,一个是最多分词,一个是最长分词。
paoding.analyzer.mode=most-words  最多分词
paoding.analyzer.mode=max-word-length 最长分词
这两个机制同样用到了字典的处理过程。例如 如果是用最多分词,原始字典文件中有 二手 汽车 二手汽车,那么.compiled文件夹最后得到的只有二手 汽车,二手汽车就没有了,因为他是由二手和汽车组成的。

5 庖丁分词最主要的有3个,一个是字典,一个是beef,就是要分的词,一个是knife,就是分词的规则。分词的结果是个LinkedList,不断的next得到全部的分词结果。在生成LinkedList过程中,同样会用到最长和最多的规则。

6 庖丁分词主要用的是一个叫CJKKnife的分词规则,其中的dissect方法有300行,里面有几乎全部的逻辑,不过这个不是很好懂,虽然作者写了不少注释,我也是debug了几次才搞懂的。


7 庖丁的字典也比较有意思,我最初的想法是map,把每个字典都做为一个key,查的时候如果对应的key为null,那么就没这个字典。但是这个太天真了,首先这个会浪费很多的空间,我们还需要以某个字开头的是否在字典里。直接map也是不能实现的。
庖丁的做法是:有一个大的数组,记录所有的字典。一个多叉树,不同字开头的不同分叉,如果得到的集合小于16,直接一个二叉树,多于16的话,继续比较下一个字,又是多个分叉,这样循环下去。
这样的空间占用还是比较小的,而且一个分叉下面没有只分叉,那么说明这个开头的肯定不在字典里了。查找的时候也很快,一个个分叉查下去是很快的。

8 庖丁的分词逻辑是:从第一个字开始,去字典里去找,然后前两个字,然后前3个字,如果查到后面的不可能出现在字典里,那么现在从第二个字开始,然后第2,3字,然后3,4字。。如果查到后面的不可能出现在字典里,那么现在从第二个字开始....

9 庖丁遇到非汉字会强行分开。

10 庖丁增加了对《》“”这些的处理,这些词会作为一个完整的词出现。

总的来说基本就是这样的,生成字典,根据字典分词。(字典没有没两个字一分词。)
分享到:
评论

相关推荐

    庖丁分词jar包和dic目录

    描述中的链接指向了GitHub上的项目“chubbyjiang/MapReduce”,这可能意味着庖丁分词被集成到MapReduce环境中,用于大数据处理中的中文文本分析。MapReduce是一种分布式计算模型,由Google提出,常用于海量数据的...

    庖丁分词jar包

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

    庖丁分词.jar

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

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

    “庖丁解牛”是针对Lucene设计的一款中文分词工具,取自古代典故,寓意对中文文本进行细致入微的分析。庖丁分词支持词典分词、基于统计的分词以及混合分词模式,能够满足不同场景下的需求。它的特点包括高精度、高...

    庖丁分词测试数据集 工具

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

    庖丁解牛分词源码

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

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

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

    庖丁解牛 中文分词工具

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

    庖丁分词归类

    总之,"庖丁分词归类"是一个强大的Java分词工具,适用于需要对中文文本进行深入处理的各种应用场景,如搜索引擎构建、文本挖掘、情感分析等。其易用性、高效性和灵活性使得它在Java开发者中受到广泛欢迎。

    庖丁分词工具

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

    庖丁解牛分词 java包

    在Java开发中,分词是自然语言处理(NLP)的重要环节,它将连续的汉字序列拆分成有意义的词汇单元,为后续的文本分析、信息检索、情感分析等任务提供基础。 分词的重要性在于,中文没有明显的空格或其他分隔符来...

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

    "庖丁解牛分词"是一个针对中文文本的分词工具,它借鉴了中国古代庖丁解牛的故事,寓意对文本进行精细、深入的剖析。这个工具的主要目标是帮助开发者更准确地切分中文句子,提取关键信息,从而提升搜索效率或理解文本...

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

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

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

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

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

    标题 "sorlr + tomcat+ 庖丁解牛中文分词 配置文档" 提到的是一个关于在Apache Solr中集成Tomcat服务器,并利用庖丁解牛中文分词工具进行中文处理的配置教程。这个配置过程对于搭建支持中文搜索的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 : / ...

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

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

    lucene 中文分词 庖丁解牛

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

    庖丁分词器

    将源码做部分修改,打成jar包,适合于lucene3.6版本。注意paoding-dic-home.properties的配置

Global site tag (gtag.js) - Google Analytics