`
ljm3256748
  • 浏览: 43846 次
  • 性别: Icon_minigender_1
  • 来自: 地球
社区版块
存档分类
最新评论

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

阅读更多

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

转自:http://blog.donews.com/windshow/archive/2005/09/23/564655.aspx 

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(包括英文和中文).去除所有的标点符号.
分享到:
评论

相关推荐

    lucene.NET 中文分词

    **Lucene.NET 中文分词技术详解** Lucene.NET 是一个高性能、全文检索库,它是Apache Lucene项目在.NET平台上的实现。作为一个开源的搜索引擎框架,Lucene.NET为开发者提供了强大的文本搜索功能。而在处理中文文档...

    lucene3庖丁解牛中文分词器

    2. **字典支持**:分词效果很大程度上依赖于字典的质量。庖丁解牛提供了丰富的字典资源,涵盖了各类常见词汇,同时支持用户自定义字典,以满足不同场景的需求。 3. **智能分析**:除了基础的词语切分,庖丁解牛还...

    Lucene中文分词器组件

    本文将深入探讨Lucene中文分词器组件的相关知识点。 首先,我们要明白中文分词的重要性。由于中文是以词为基本单位,不像英文那样有明显的空格分隔,因此在进行信息检索时,需要先对中文文本进行分词,将连续的汉字...

    Lucene关于几种中文分词的总结

    以下是对几种常见Lucene中文分词器的总结: 1. CJKAnalyzer:此分词器是Lucene contrib目录下的analyzers子目录中的组件,位于cn目录。CJKAnalyzer主要针对中日韩三国语言进行分词,它基于字符级别进行分词,适用于...

    Lucene与中文分词技术的研究及应用

    ### Lucene与中文分词技术的研究及应用 #### Lucene简介与原理 Lucene是一款高性能、全...综上所述,通过深入研究Lucene及其在中文环境下的应用,不仅可以提升全文搜索系统的性能,还能更好地满足特定用户的需求。

    c# 中文分词 LUCENE IKAnalyzer

    标题中的"C# 中文分词 LUCENE IKAnalyzer"是指使用C#语言实现的一个中文分词工具,它基于开源全文检索引擎Lucene,并且采用了IKAnalyzer(智能汉字分词系统)的Java版本进行移植。Lucene是一个强大的、高性能的信息...

    Lucene4.7+IK Analyzer中文分词入门教程

    【Lucene4.7+IK Analyzer中文分词入门教程】 Lucene是一个开源的全文检索库,它提供了文本分析、索引和搜索的核心工具。在这个入门教程中,我们将使用Lucene 4.7版本,结合IK Analyzer,一个专门针对中文分词的开源...

    Lucene中文分词器包

    来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器。 1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP) 2. 对数量词、地名、路名的...

    盘古分词+Lucene

    通过集成盘古分词,Lucene能够更好地理解中文文本,从而提高搜索的准确性和效率。 在实际应用中,开发者可以通过以下步骤实现盘古分词与Lucene的整合: 1. **安装与引入**:首先,需要将Lucene.Net.Analysis.PanGu...

    lucene中文分词工具包

    Lucene是一个高性能、全文检索库,而“lucene中文分词工具包”则为Lucene提供了一个专门针对中文分词的解决方案。这个工具包的核心是IKAnalyzer,它是一个开源且基于Java语言开发的轻量级中文分词工具,旨在提升中文...

    Lucene-Demo.rar Lucene分词的demo

    分词器的配置是灵活的,可以根据需求选择不同的分词策略,比如标准分词器(StandardAnalyzer)适用于大多数英文文本,而中文分词可能需要使用IKAnalyzer或SmartChineseAnalyzer等针对中文特性的分词器。 在运行这个...

    如何使用Lucene的中文分词搜索

    **标题:“如何使用Lucene的中文分词搜索”** 在信息检索和文本处理领域,Apache Lucene是一个强大的全文搜索引擎库,它提供了高级的索引和搜索功能。在处理中文文本时,由于中文句子是由词语组成的,而非单个字符...

    lucene6.6+拼音分词+ik中文分词包

    提供的ik-analyzer-solr6.x.jar文件就是IK Analyzer的一个版本,适用于Solr 6.x,能够很好地与Lucene集成,进行中文分词。 除了IK Analyzer,还有pinyin4j-2.5.0.jar,这是一个Java库,用于处理汉字的拼音转换。在...

    lucene 中文分词 庖丁解牛

    《Lucene中文分词:庖丁解牛》 在信息技术高速发展的今天,全文搜索引擎已经成为网站内容检索不可或缺的一部分。其中,Apache Lucene作为一个开源的全文检索库,被广泛应用于各种项目中,尤其对于处理中文文本,...

    Lucene.Net:使用eaglet的盘古分词进行分词和搜索实例

    盘古分词是针对中文文本处理的分词工具,特别适用于Lucene等搜索引擎的中文分词。它支持多种分词模式,如精确模式、全模式、简明模式和搜索引擎模式,以满足不同场景的需求。在Lucene.Net中,集成盘古分词可以显著...

    lucene中文分词器(paoding解牛)

    《Lucene中文分词器——Paoding解牛详解》 在中文信息检索领域,分词是至关重要的一环,它能够将连续的汉字序列切割成具有独立意义的词语,为后续的索引和查询提供基础。Lucene作为Java最著名的全文搜索引擎库,其...

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

    《Lucene中文分词——庖丁解牛》 在自然语言处理领域,中文分词是基础且关键的一环。在Java开发中,Apache Lucene是一个强大的全文搜索引擎库,但默认并不支持中文,这就需要借助第三方分词工具。本文将深入探讨...

    lucene Analyzer 庖丁解牛 中文分词

    《Lucene Analyzer剖析:中文分词的奥秘》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用于各种系统中。其核心功能之一就是对输入...理解Analyzer的工作原理和特性,是掌握Lucene中文处理的关键。

    支持lucene的词典机械中文分词

    《支持Lucene的词典机械中文分词技术详解》 在信息技术领域,中文分词是自然语言处理(NLP)中的关键步骤,它涉及到将连续的汉字序列切分成具有独立语义的词汇单元,这对于信息检索、文本分析、机器翻译等任务至关...

Global site tag (gtag.js) - Google Analytics