在lucene中使用ictclas算法 实现对中文分词索引

在lucene中使用ictclas算法

分词研究 2010-03-29 16:38:51 阅读132 评论0   字号: 订阅

给Lucene加入性能更好的中文分词

      Lucene本身的StandardAnalyzer提供了中文分词接口,不过其采用的为1-gram. 这种分词方法虽然不会损失任何索引信息,但是造成的索引垃圾太多,用户得到的查询结果中垃圾也是很多. 经过认真研究了Lucene的Analysis包,我写了一个TjuChineseAnalyzer,效果不错.

简要介绍一下:
       TjuChineseAnlyzer 的功能强大,在中文分词方面使用JNI调用ICTCLAS(中国科学院,算法为隐马尔可夫模型)的java接口. 所以其在中文方面性能上同与ICTCLAS.其在英文分词上采用了Lucene的StopAnalyzer,可以去除 stopWords,而且可以不区分大小写,过滤掉各类标点符号.完全兼容Lucene的底层分词格式.

核心代码如下:
/**
*Author:zhangbufeng
* TjuAILab (天津大学人工智能实验室)
* 2005.9.23
*
* TjuChineseAnlyzer的功能相当强大,在中文分词方面由于其调用的为ICTCLAS的java接口.
* 所以其在中文方面性能上同与ICTCLAS.其在英文分词上采用了Lucene的StopAnalyzer,可以去除
* stopWords,而且可以不区分大小写,过滤掉各类标点符号.
*/
public final class TjuChineseAnalyzer extends Analyzer {
private Set stopWords;

/** An array containing some common English words that are not usually useful
for searching. */
//可以在此扩展English stop words和Chinese stop words
public static final String[] ENGLISH_STOP_WORDS = {
"a", "an", "and", "are", "as", "at", "be", "but", "by",
"for", "if", "in", "into", "is", "it",
"no", "not", "of", "on", "or", "s", "such",
"t", "that", "the", "their", "then", "there", "these",
"they", "this", "to", "was", "will", "with",
"我","我们"
};

/** Builds an analyzer which removes words in ENGLISH_STOP_WORDS. */
public TjuChineseAnalyzer() {
stopWords = StopFilter.makeStopSet(ENGLISH_STOP_WORDS);
}

/** Builds an analyzer which removes words in the provided array. */
public TjuChineseAnalyzer(String[] stopWords) {
this.stopWords = StopFilter.makeStopSet(stopWords);
}

/** Filters LowerCaseTokenizer with StopFilter. */
public TokenStream tokenStream(String fieldName, Reader reader) {
try{
ICTCLAS splitWord = new ICTCLAS();
String inputString = FileIO.readerToString(reader);
String resultString = splitWord.paragraphProcess(inputString);
return new StopFilter(new LowerCaseTokenizer(new StringReader(resultString)),stopWords);
}
catch (IOException e){
System.out.println("转换出错");
return null;
}
}
}

进行测试:
我用Junit进行了测试,效果很好.同时我用TjuChineseAnalyzer进行索引,查询,测试
效果都很好.
下边给出用TjuChineseAnalyzer切分的词语
原文:
体育讯 在被尤文淘汰之后,皇马主帅博斯克拒绝接受媒体对球队后防线的批评,同时还为自己排出的首发阵容进行了辩护。“失利是全队的责任,而不仅仅是后防线该受指责,”博斯克说,“我并不认为我们踢得一塌糊涂。”“我们进入了半决赛,而且在晋级的道路上一路奋
战。即使是今天的比赛我们也有几个翻身的机会,但我们面对的对手非常强大,他们踢得非常好。”“我们的球迷应该为过去几个赛季里我们在冠军杯中的表现感到骄傲。”博斯克还说。对于博斯克在首发中排出了久疏战阵的坎比亚索,赛后有记者提出了质疑,认为完全应该将队内的另一
名球员帕文派遣上场以加强后卫线。对于这一疑议,博斯克拒绝承担所谓的“责任”,认为球队的首发没有问题。“我们按照整个赛季以来的方式做了,对于人员上的变化我没有什么可说的。”对于球队在本赛季的前景,博斯克表示皇马还有西甲联赛的冠军作为目标。“皇家马德里在冠军
杯中战斗到了最后,我们在联赛中也将这么做。”
A Java User Group is a group of people who share a common interest in Java technology and meet on a regular basis to share technical ideas and information. The actual structure of a JUG can vary greatly - from a small number of friends and coworkers meeting informally in the evening, to a large group of companies based in the same geographic area. Regardless of the size and focus of a particular JUG, the sense of community spirit remains the same.
切分结果如下:

体育 讯 在 被 尤文淘汰 之后 皇 马 主帅 博斯克 拒绝 接受 媒体 对 球队 后防线 的 批评 同时 还 为 自己 排 出 的 首发 阵容 进行 了 辩护失利 是 全队 的 责任 而 不仅仅 是 后防线 该 受 指责 博斯克 说 并 不 认为 踢 得 一塌糊涂 进入 了 半决赛 而且 在 晋级的 道路 上 一路 奋 战 即使 是 今天 的 比赛 也 有 几 个 翻身 的 机会 但 面对 的 对手 非常 强大 他们 踢 得 非常 好的 球迷 应该 为 过去 几 个 赛季 里 在 冠军杯 中 的 表现 感到 骄傲 博斯克 还 说 对于 博斯克 在 首发 中 排 出 了 久疏 战 阵 的 坎比亚索 赛后 有 记者 提出 了 质疑 认为 完全 应该 将 队 内 的 另 一 名 球员 帕 文 派遣 上场 以 加强后卫 线 对于 这 一 疑 议 博斯克 拒绝 承担 所谓 的 责任 认为 球队 的 首发 没有 问题 按照 整个 赛季 以来 的 方式 做 了对于 人员 上 的 变化 没有 什么 可 说 的 对于 球队 在 本 赛季 的 前景 博斯克 表示 皇 马 还有 西 甲 联赛 的 冠军 作为目标 皇家 马德里 在 冠军 杯 中 战斗 到 了 最后 在 联赛 中 也 将 这么 做 java user group group people who share common interest java technology meet regular basis share technical ideas information actual structure jug can vary greatly from small number friends coworkers meeting informally evening large group companies based same geographic area regardless size focus particular jug sense community spirit remains same

评析:从结果可以看出其切分效果,过滤掉了stop words(包括英文和中文).去除所有的标点符号.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值