`
lianshisheng
  • 浏览: 28210 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

Lucene本身的StandardAnalyzer提供了中文分词接口,不过其采用的为1-gram. 这种分词方法虽然不会损失任何索引信息,但是造成的索引垃圾太多,用户得到的查询结果中垃圾也是很多.
  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(包括英文和中文).去除所有的标点符号.

  Trackback: http://tb.donews.net/TrackBack.aspx?PostId=564655 <script src="tag.php?action=relatetag&amp;rtid=67" type="text/javascript"></script>

分享到:
评论

相关推荐

    基于Lucene的中文分词方法设计与实现

    ### 基于Lucene的中文分词方法设计与实现 #### 一、引言 随着信息技术的迅猛发展,互联网上的信息量呈爆炸性...未来的研究方向可以考虑结合更先进的自然语言处理技术,如深度学习模型,进一步提升中文分词的性能。

    Lucene5学习之拼音搜索

    《深入探索Lucene5:拼音搜索的实现与应用》 Lucene是一个强大的全文搜索引擎库,广泛应用于各种信息...在开发基于Lucene的搜索系统时,掌握拼音搜索的实现和优化技巧,将能更好地满足用户需求,提升系统的实用性。

    IK和Lucene

    标题中的"IK和Lucene"指的是IK Analyzer与Apache Lucene两个关键组件,它们在中文文本处理和全文检索领域中有着重要应用。IK Analyzer是一个开源的Java分词器,专为中文处理而设计,广泛用于搜索引擎、信息检索系统...

    lucene3源码分析

    ### Lucene3源码分析知识点概述 #### 一、全文检索的基本原理 ##### 1....以上是对Lucene3源码分析的一些关键知识点总结,通过对这些概念和技术的理解,可以更好地掌握Lucene的工作原理及其应用。

    Lucene3.5的学习研究报告

    总之,Lucene 3.5版本的更新带来了诸多改进,包括性能优化、新的查询功能和更好的多线程支持,使得开发者能够构建更强大、更高效的搜索引擎。同时,理解和解决在实际应用中遇到的问题也是优化Lucene性能的关键步骤。

    Lucene与数据库结合示例(加双关键字高亮)

    "加了高亮,看起来就更好点"意味着这个示例不仅实现了基本的搜索功能,还加入了高亮显示搜索关键词的特性,使得用户能更直观地看到搜索结果中与查询相关的部分。 **标签:“Lucene”** Lucene是Apache软件基金会的...

    lucene整合mmseg4j实例和项目实例

    《Lucene整合MMSEG4J实战与项目...同时,提供的项目实例为开发者提供了一个直观的学习平台,有助于更好地理解和运用这一技术。在实际开发中,不断优化和调整,以适应不同业务场景的需求,是提升搜索引擎质量的关键。

    Lucene 原理与代码分析完整版.pdf

    ### Lucene原理与代码分析概览 #### 全文检索的基本原理 全文检索技术的核心在于构建和维护一个索引库,使得用户能够通过输入...通过对上述内容的深入了解,开发者可以更好地利用Lucene来构建高效的全文检索系统。

    Lucene3总体图_建索引_查询_数据库索引

    ### Lucene3总体架构与操作流程 ...通过对各个模块的深入理解,开发者可以更好地利用Lucene来构建高效、灵活的搜索应用。随着版本的演进,Lucene不断增强了对国际化支持等功能,使其在更广泛的场景下发挥重要作用。

    Lucene索引搜索简介以及入门实例源码.rar

    4. **分析器(Analyzer)**:在建立索引前,Lucene会使用分析器对文本进行处理,如分词、去除停用词等,以便更好地匹配用户的查询。 5. **查询(Query)**:用户输入的搜索词经过分析后转换为查询对象,Lucene使用...

    兼容solr4.10.3的mmseg4j-1.9.1分词器

    3. `mmseg4j-solr-1.9.2-SNAPSHOT.jar`:这个文件是专门为Solr定制的mmseg4j版本,可能是为了更好地与Solr集成,优化性能或者添加了特定的Solr插件。版本号1.9.2-SNAPSHOT与前面的分析模块版本相同,说明这两个文件...

    lucene(HelloWord)

    Lucene,作为Apache软件基金会的顶级项目,是一款高性能、全文本检索引擎库,被广泛应用于各类搜索引擎和信息检索系统中。它提供了完整的搜索功能,包括索引、查询、排序等,并且支持多种编程语言,如Java、Python等...

    Lucene 例子

    **Lucene 知识点详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会开发。...通过深入研究这个示例,开发者可以更好地理解 Lucene 的工作原理,并以此为基础构建自己的全文搜索引擎应用。

    lucene实例

    Lucene是一个开源全文检索库,由Apache软件基金会开发并维护。它为Java应用程序提供了一个强大的...通过"lucene实例"的学习,你不仅可以掌握API的用法,还能理解信息检索背后的基本原理,从而更好地满足你的项目需求。

    深入了解Lucene之二 索引结构.ppt

    本篇内容将详细解析Lucene的索引结构,帮助你更好地理解和运用这个强大的工具。 首先,我们要明白索引的基本构成。在Lucene中,索引是由一系列文档(document)组成的,每个文档包含多个域(field),每个域又由多...

    Lucene+原理与代码

    ### Lucene原理与代码分析详解 #### 全文检索的基本原理 ...通过以上对Lucene原理、代码分析及关键步骤的详细解析,我们可以更深入地理解全文检索系统的内部机制以及Lucene是如何高效地实现全文检索功能的。

    使用lucene 来创建一个知识库

    通过阅读相关源码,我们可以更好地理解Lucene的工作原理,并将其应用到实际项目中。 综上所述,利用Lucene创建知识库是一个涉及多个步骤的过程,包括索引构建、查询解析和结果展示等。通过掌握这些知识并结合具体...

    Lucene 原理与代码分析完整版

    ### Lucene原理与代码分析详解 #### 全文检索的基本原理 **全文检索**是一种能够对文本中的每一个词...通过对Lucene原理与代码的深入分析,开发者可以更好地理解和应用Lucene的强大功能,以满足各种复杂的搜索需求。

    IKAnalyzer fro lucence5.x

    为了更好地利用这个工具,你需要了解如何配置词典、设置停用词、以及如何在Lucene的索引和查询过程中调用IKAnalyzer。同时,理解IKAnalyzer的分词原理和优化技巧也是提高系统性能的关键。总的来说,IKAnalyzer是一个...

Global site tag (gtag.js) - Google Analytics