介绍一个自己写的基于字典的中文分词器

08-11-04 bbmonkey62
ShuzhenAnalyzer是一款用java写的基于字典的中文分词器,可与Lucene一起使用构建搜索引擎系统

其特性如下:

1、分词时完全按照标准分词来进行,这样保证了在和一些高亮显示组件如highlighter一起使用时,能准确无误的将命中进行高亮显示,避免了Google高亮显示的Bug;

2、分词采用完全匹配(自命名)方式,也就是只要是符合字典系统中条目的就全部匹配出来

3、基于字典系统分词,比较完美地将字典条目数量和索引创建(搜索)速度结合了起来,而字典系统的存放介质是可由使用者自由配置的,既可以将字典系统只配置在JDBM系统中,也可以将字典系统只配置在内存系统中,也可以两者结合在一起使用,当两者结合一起使用的时候,优先调用内存字典系统,当且仅当在内存字典系统中没有找到匹配项时才调用JDBM字典系统;

4、字典系统条目数量理论上可以趋于无穷多而绝不会出现内存溢出现象(在使用者理性配置的前提下,因为如果使用者配置为字典系统只采用内存,而条数过多情况下是会内存溢出的)

5、即使仅仅采用JDBM字典系统,索引创建及搜索速度受字典条目数量影响也是非常小的,速度也很快

6、配置文件的存放支持相对路径,这样更灵活,更方便应用在一些虚拟机上

7、可以很方便对字典系统进行管理,管理功能如下:
7.1、往字典系统中增加单个条目
7.2、往字典系统中增加多个条目
7.3、利用txt文件往字典系统中批量增加多个条目
7.4、删除字典系统中指定的某一个条目
7.5、判断字典系统中是否已存在某一条目

8、对搜索词提供了两种处理方式,可以更好地应用在不同需求的系统中,提高搜索结果的质量
如:搜索词为:1949年10月1日,中华人民共和国在\"北京\"宣-告成立
那么用两种方式分别对此搜索词进行处理过的结果如下:
第一种处理后的结果:1949 10 1 中华 中华人民 中华人民共和国 华人 人民 人民共和国 共和 共和国 "北京" -告成 成立
第二种处理后的结果:1949 年 10 月 1 日 中华 中华人民 中华人民共和国 华人 人民 人民共和国 共和 共和国 在 "北京" 宣 -告成 成立

值得特别注意的是:在对搜索词进行处理时忽略了以下几个特殊符合:| 、- 、" ,主要是为了满足关键词中特殊字符的要求,比如在google搜索中,用"关键词"表示结果中必须包含双引号包含的关键词,在lucene中, 用"关键词1 -关键词2"表示搜索结果中包含关键词1但不包含关键词2等,去掉了上一版本的特殊符号!

下载以及详细的测试数据分析和分词结果请参见:

http://www.shuzhen.net

[该贴被bbmonkey62于2008-11-04 13:11修改过]

bbmonkey62
2008-11-04 13:13
另外对jdon论坛提点建议,你们的论坛竟然不支持firefox发帖!

我刚开始用firefox发帖,帖子竟然不知道发到哪里去了,也没有什么提示,没办法用ie又发了一次!

banq
2008-11-04 15:02
这是用firxFox 3.0发的贴,Jdon论坛是采取通用prototype.js包,兼容性好。