`

庖丁(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建立索引jar包和Paoding庖丁分词jar包,Lucene结合Paoding庖丁分词创建索引索引jar包汇总

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

    庖丁分词.jar

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

    中文分词器Paoding(庖丁)

    很好用的中文分词器,能很好的与搜索引擎框架整合,此jar兼容支持Lucene3.0以上版本。

    庖丁分词jar包和dic目录

    https://github.com/chubbyjiang/MapReduce

    Paoding中文分词

    庖丁解牛中文分词,速度不错,词库也很全面,非常不错!

    庖丁解牛分词 java包

    庖丁解牛分词 java包庖丁解牛分词 java包庖丁解牛分词 java包庖丁解牛分词 java包庖丁解牛分词 java包庖丁解牛分词 java包庖丁解牛分词 java包

    paoding(庖丁解牛)

    庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。Paoding填补了国内中文分词方面开源组件的空白,本书介绍了在nutch上配置paoding

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

    支持中文的庖丁解牛,庖丁分词,找了好久才找到的希望对你有帮助。

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

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

    庖丁分词jar包

    庖丁分词的jar包

    庖丁分词工具

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

    兼容solr4.10.2的ik-mmseg4j-paoding分词器

    能兼容solr-4.10.2的分词器,大礼包...包括IK分词器,mmseg4j分词器,庖丁分词器.都是经本人测试可用,其中mmseg4j与庖丁都是下载源码,修改重编译并测试生成的.希望大家喜欢.至于与solr的整合方式,网上很多,这里就不介绍了.

    paoding的maven工程及jar包

    pom中定义了依赖包org.apache.lucene的lucene-analyzers2.2.0,commons-logging的commons-logging1.0.4,target中的jar包即是编译后的文件。可以自己动手打包paoding.jar

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

    庖丁解牛分词之自定义词库、庖丁解牛配置,java搜索分词

    庖丁解牛分词器jar包

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

    庖丁解牛分词源码

    庖丁解牛分词器源码,包含源码与对应项目,可以用eclipse打开编译

    paoding-analysis.jar

    paoding-analysis 庖丁分词 paoding-analysis.jar java开源中文分词jar包

    庖丁分词测试数据集 工具

    庖丁分词测试数据集 工具

    paoding 中文分词

    paoding 中文分词 项目包 可通过文本读取内容分词 运行 src/AnalyzerTest 即可

Global site tag (gtag.js) - Google Analytics