`

庖丁(Paoding)分词的词典原理解析

 
阅读更多

Paoding分词过程中词典是相关重要的一环,其特性主要有:

(1)多词典支持,词典功能区分;

(2)词典加载入内存使用,使用预加载和Lazy Mode模式;

(3)根据分词模式,对词典进行二次编译;

(4)词典变更侦测,当词典文件发生变化时,可以重新加载词典。

1.1     词典类型

庖丁中有多种词典,每一种词典在分词过程中都不有同的意义。主要的词典及其功能如下:

(1)VocabularyDictionary:分词主要的词典,最后构建索引的索引项(term\dictionary);

(2)ConfucianFamilyNamesDictionary:中文姓氏词典,用于识别特殊词;

(3)NoiseCharactorsDictionary:停止单字词典,该词典中的词不用于构建索引项;

(4)NoiseWordsDictionary:停止词语词典,该词典中的词不用于构建索引项;

(5)UnitsDictionary:计量单位词典,该词典中的词主要是一些计量单位。

paoding将多个词典进行组合进行使用。

 

1.2     词典加载流程

1)        PaodingAnalyzer初始化时需要构建Paoding对象;

2)        先由PaodingMaker的readUnCompiledDictionaries调用FileDictionaries;

3)        获取各种属性和词典编译类;

4)        读取未编译词典属性、编译词典(FileDictionaries的一些方法中才真正的加载了词项、CompiledFileDictionaries中调用读取词项);

5)        使用编译后的词典;

6)        为词典设置变更监听器。

1.3     词典文件格式

词典文本一般为纯文本格式,notepad将文件保存为unitcode或utf-8时会在文件开头保存bom字符串,notepad根据是否有bom来识别该文件是否是utf-8编码存储的(详情参见 ref:http://www.w3.org/International/questions/qa-utf8-bom)。而庖丁字典需要将这个字符从词典中去掉。

词典内格式是一行一个词。 

1.4     读取词典文件

如果需要编译,那么读取词典文件是在词典编译前进行。如果不需要编译,则先不加载。

FileDictionaries的一些方法中才真正的加载了词项、CompiledFileDictionaries中调用读取词项。

词典文件读取采用了Lazy Mode,即需要的时候再加载。

 

1.5     词典编译

(1)根据系统参数配置,调用相应的词典编译类,共有两种一种是MostWordsModeDictionariesCompiler类,即最大词量分词方式,另一种是SortingDictionariesCompiler这个是按词的字顺编译的方式;

(2)判断(vocabularyDictionary)词典是否应该编译:检查文件夹中是否在这个文件:.compiled/xxx/.metadata,从中读取词典的元数据,如果编译类、摘要、版本相同,说明经过了编译,则不需要编译;其他情况都需要编译。

(3)最小切分分词词典编译:将词典中的每一个词当作一个可以被分词的字符串,如果该词还可以继续被完全分解为多个词,那么编译后不记录该词。程序分词某个词后将其首尾位置之间的位置都置为true,如果一个词的所有位置都为true那么说明该词能再被完全分解为多词,否则可作为独立词。

(4)SortingDictionariesCompiler其实就是按词在词典中的原序来进行编译,基本不再做其他处理。

(5)readCompliedDictionaries方法返回庖丁中的编译后的多种词典集合。

 

1.6     词典变更侦测

1)变更侦测原理

在创建Paoding时初始化Dictionaries,然后启动Detector利用线程驻守,定期去检测;每一个字典都有一个快照,记录下当前快照,检测时将最新快照与当前快照比对,如果发现不同,那么说明有更新,则触发变更监听DiffListener。更新有三种情况:修改、删除、添加。发现更新后,监听器刷新词典,然后重新为各个Knife设置词典。

 

2)快照原理

快照主要记录了如下信息:

 

// 此次快照版本,使用时间表示

    private long version;

 

    // 根地址,绝对地址,使用/作为目录分隔符

    private String root;

 

    // String为相对根的地址,使用/作为目录分隔符

    private Map/*<String, InnerNode>*/ nodesMap = new HashMap/*<String, InnerNode>*/();

 

    //内部节点

    private InnerNode[] nodes;

    //checksum of this snapshot

    private String checksum;

 

快照刷新方法:获取当前时间作为version,根路径作为root,内部所有的文件作为nodes,然后<相对根的地址,node>作为nodesMap;

快照摘要:采用lazy mode获取快照摘要;

快照对比原理:对比version\root和新增、修改、删除的词典文件(而不是词典中的词)。

分享到:
评论

相关推荐

    Lucene建立索引jar包和Paoding分词jar包

    《Lucene与Paoding分词在索引构建中的应用》 Lucene,作为一款开源的全文检索库,被广泛应用于各种信息检索系统中,而Paoding分词则是针对中文进行高效精准分词的工具,两者结合能显著提升中文文本检索的效率和准确...

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

    paoding 分词

    可以从官方网站或者第三方资源站点下载paoding分词的最新版本,例如`paoding-analysis-2.0.4-alpha2.zip`和`Paoding分词.zip`。 3. **解压与配置** 解压缩下载的文件,将解压后的目录添加到你的项目类路径...

    Paoding中文分词

    标题“Paoding中文分词”指的是一个专门用于处理中文文本的分词工具,名为“庖丁解牛中文分词”。在自然语言处理领域,分词是预处理的重要步骤,它将连续的汉字序列切分成有意义的词汇单元,便于后续的文本分析和...

    庖丁分词jar包

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

    paoding 中文分词

    "庖丁"是它的别名,来源于中国古代庖丁解牛的故事,寓意其在处理复杂中文文本时,能够如庖丁解牛般游刃有余,精准高效地进行分词。 中文分词是自然语言处理(NLP)中的关键步骤,因为中文没有明显的空格来区分单词...

    庖丁解牛分词 java包

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

    lucene中文分词器(paoding解牛)

    Paoding分词器是一款专为Lucene设计的高性能、高精度的中文分词组件,它在2.0.4-alpha2这个版本中,不仅提供了基础的分词功能,还引入了多种优化策略,使得在复杂语境下的分词效果更为精准。Paoding这个名字来源于...

    庖丁分词归类

    "paoding-analysis-2.0.4-beta"是庖丁分词的一个特定版本,其中"2.0.4"代表该版本的主次版本号,"beta"则表示这是一个测试版,可能包含未解决的问题或功能不完善的地方,开发者通常会发布正式版之前先推出测试版,...

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

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

    PaoDing.zip_java paoding_java 分词_paoding_中文文本分词_文本 检索

    庖丁(PaoDing)是一款专为Java平台设计的中文文本分词工具,它在中文文本处理领域具有较高的性能和准确性。分词是自然语言处理中的基础步骤,对于中文而言,由于没有明显的空格来区分单词,因此需要通过特定算法将...

    庖丁解牛分词器jar包

    Paoding's Knives 中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。 高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。 采用基于 不限制个数 的词典文件对文章...

    paoding-analysis-2.0.4-alpha2.zip_java 分词_paoding

    Paoding Analysis(也称为“庖丁分析”)是一款由李明开发的高性能Java分词系统,它旨在解决中文文本处理中的分词问题。Paoding Analysis的特点在于其高效率和自适应性,能够根据不同的应用场景进行定制化配置,满足...

    基于Lucene的中文分词器代码paoding,IK,imdict,mmseg4j

    1. Paoding(庖丁)分词器: Paoding是一款高性能的中文分词器,设计目标是提供简单易用、快速准确的分词服务。它采用了高效的正向最大匹配算法,并且支持自定义词典,可以灵活地处理新词汇。Paoding还提供了对UTF-...

    lucene3庖丁解牛中文分词器

    1. **引入库**:首先,我们需要将`paoding_lucene3_0530.jar`文件添加到项目的类路径中,这个库包含了庖丁解牛分词器的实现。 2. **配置字典**:利用`dic`目录下的字典文件,可以定制化分词器的词典,以适应特定...

    paoding-analysis-2-1-.0.4-beta:全文搜索-庖丁分词原始码

    《庖丁分词:全文搜索的关键技术解析》 在信息技术高速发展的今天,全文搜索作为信息检索的重要手段,已经成为各类网站、应用不可或缺的功能。而庖丁分词,作为一款优秀的中文分词工具,对于全文搜索的效率和准确性...

    庖丁解牛算法代码解读_y.docx

    本文的编写目的是为了帮助读者理解和掌握庖丁解牛分词算法的基本原理,以及其实现过程,从而能够应用到实际的自然语言处理项目中。 1.2 程序框架 庖丁解牛算法的程序框架包括预处理、分词策略、词典管理和后处理等...

    paoding-analysis3.0.jar

    Paoding Analysis(庖丁分析)是由中国开发者开发的一个高效、灵活且功能强大的中文分词工具,它专门为 Lucene 设计,提供了对中文文本的智能分词、词性标注和关键词提取等功能。在 "paoding-analysis3.0_for_lucene...

    paoding-analysis-2.0.1(UTF-8).zip_Java 8_paoding-analysis jar_pa

    “庖丁分析”(Paoding Analysis),又称为“庖丁分词”,是由李明创建的一个开源项目,它在处理中文文本时,能精准地将句子拆分成一个个独立的词汇,这对于信息检索、文本挖掘、情感分析等应用场景至关重要。...

Global site tag (gtag.js) - Google Analytics