Lucene中文分词“庖丁解牛”

From: http://www.javaeye.com/topic/49441

Lucene中文分词 “庖丁解牛”

附件 为本人设计编写的组件,中文分词“庖丁解牛”,具有相当好的使用价值。。。

高效率:我的赛扬PC 1 秒解析 >>> 20000汉字的词语  (实际测试结果数据,可达1秒10万+汉字)
高可维护性:使用“庖丁”隐喻,形象明晰
高灵活性,可扩展:OOD

对比:《终于突破中文分词的效率问题》http://www.lucene.org.cn/read.php?tid=54&fpage=2 他的效率为 6秒 解析2588汉字
 
示例程序为com.sohospace.lucene.analysis.xanalyzer.Main0

  1. 附件的源代码是GBK编码的,若有需要utf8编码的,alin_ass同志辛苦转化提供了一份,在第二页:http://www.javaeye.com/post/213041
  2. 下载完Paoding.rar后,请继续下载HashBinaryDictionary.java.rar解压后覆盖到指定com/sohospace/dictionary位置,替换原来的HashBinaryDictionary.java
  3. BUGFIX:  请在com.sohospace.paoding.cjk.FileWordsLoader.java的loadCJKVocabulary方法返回前加上如下一行代码 (Fix 噪声词没有处理的bug): 

                Merger.remove(base, ejk.get("x干扰词"));  //哪些词是噪声词:在 "x干扰词.dic"文件中定义

2007.1.27日增加的内容  请求您的测试
各位eye友是否可以把您的测试数据,以及机器配置 发送到我的javaeye收件箱中 以有利于持续改进 感谢先。
测试类使用com.sohospace.lucene.analysis.xanalyzer.Main1.java  (请从下面清单,下载Main1.java.rar解压后添加到源文件中) 
被测试的字符串总长度2, 185, 856字 4, 347, 520字节。我现在测试数据如下(Celeron 2.13GHz 512m内存):

:::文章大小: 2185856字 4347520字节
:::词典装载耗时: 1719 ms
:::切词+打印耗时: 8053 ms

Paoding.rar
 描述: 中文分词“庖丁解牛”,面向对象,高效率,高扩展性
下载
 文件名: Paoding.rar
 文件大小: 1 M
 下载过的: 文件被下载或查看 1577 次
HashBinaryDictionary.java.rar
 描述: 原来的HashBinaryDictionary.java使用对第一个字符hash+二份查找。这个算法已经不错。但下面的更新使用了更好的策略。可连续hash词语的字符。理论上这个词典算法应该到达极致了。覆盖HashBinaryDictionary.java在com/sohospace/dictionary下
下载
 文件名: HashBinaryDictionary.java.rar
 文件大小: 2 KB
 下载过的: 文件被下载或查看 878 次
Main1.java.rar
 描述: 对一个长度2185856的字符串(4,347,520字节)的分词效率测试。 下载解压后添加到源文件中
下载
 文件名: Main1.java.rar
 文件大小: 6 KB
 下载过的: 文件被下载或查看 631 次

示例代码:搜索时...

代码
  1. XAnalyzer analyzer = XFactory.getQueryAnalyzer();//搜索时应使用的分析器   
  2. String testString = "中华人民共和国在1949年建立,从此开始了新中国的伟大篇章";   
  3. Reader r = new StringReader(testString);   
  4. XTokenizer ts = (XTokenizer) analyzer.tokenStream("", r);   
  5.   
  6. Token t;   
  7. while ((t = ts.next()) != null) {   
  8.    System.out.println(t);   
  9. }   
<script type="text/javascript">render_code();</script>

 

解析结果如下:
(中华人民共和国,0,7)
(1949年,8,13)
(建立,13,15)
(从此,16,18)
(开始,18,20)
(新中国,21,24)
(伟大,25,27)
(大篇,26,28)
(篇章,27,29)

示例代码2: 建立索引时...

 

代码
  1. XAnalyzer analyzer = XFactory.getWriterAnalyzer();//建立索引时应使用的分析器      
  2. String testString = "中华人民共和国在1949年建立,从此开始了新中国的伟大篇章";      
  3. Reader r = new StringReader(testString);      
  4. XTokenizer ts = (XTokenizer) analyzer.tokenStream("", r);      
  5.      
  6. Token t;      
  7. while ((t = ts.next()) != null) {      
  8.    System.out.println(t);      
  9. }     
<script type="text/javascript">render_code();</script>

 

解析结果如下:
(中华,0,2)
(中华人民,0,4)
(中华人民共和国,0,7)
(华人,1,3)
(人民,2,4)
(人民共和国,2,7)
(共和,4,6)
(共和国,4,7)
(1949,8,12)
(1949年,8,13)
(年,12,13)
(建立,13,15)
(从此,16,18)
(开始,18,20)
(新中国,21,24)
(中国,22,24)
(伟大,25,27)
(大,26,27)
(大篇,26,28)
(篇章,27,29)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值