Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2644241
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: Java

2006-12-15 10:42:59

转载:
 
 
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(包括英文和中文).去除所有的标点符号.
阅读(1849) | 评论(0) | 转发(0) |
0

上一篇:lunece 亮点处理

下一篇:海量中文智能分词

给主人留下些什么吧!~~