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

lucene 分词器分析

阅读更多
lucene的Analyzer类里面主要包含这个方法:
public abstract class Analyzer{

 public abstract TokenStream tokenStream(String fieldName, Reader reader);

}

-------------------------------------------------------------------

public abstract class TokenStream {
                ......
 public Token next(final Token reusableToken) throws IOException {
    // We don't actually use inputToken, but still add this assert
    assert reusableToken != null;
    return next();
  }
               ......
}

所有要实现analyzer的类都要重写这个方法,获取自己制定的Tokenizer(Tokenizer继承于TokenStream)。而分词的主要方法就是TokenStream里面提供的next()方法,所有继承TokenStream类的方法都要重写这个next()方法,以制定自己分词器。

//下面分析一下StandAnalyzer,它继承于Analyzer,StandAnalyzer里面的tokenStream方法如下:
public class StandardAnalyzer extends Analyzer {
                 ......
  public TokenStream tokenStream(String fieldName, Reader reader) {
    StandardTokenizer tokenStream = new StandardTokenizer(reader, replaceInvalidAcronym);  //使用了StandardTokenizer
    tokenStream.setMaxTokenLength(maxTokenLength);
    TokenStream result = new StandardFilter(tokenStream);
    result = new LowerCaseFilter(result);
    result = new StopFilter(result, stopSet);
    return result;
  }

}
-----------------------------------------------------------------
//StandardTokenizer的next方法如下:
public class StandardTokenizer extends Tokenizer {
              .......
public Token next(final Token reusableToken) throws IOException {
      assert reusableToken != null;
      int posIncr = 1;

      while(true) {
	int tokenType = scanner.getNextToken();

	if (tokenType == StandardTokenizerImpl.YYEOF) {
	    return null;
	}

        if (scanner.yylength() <= maxTokenLength) {
          reusableToken.clear();
          reusableToken.setPositionIncrement(posIncr);
          scanner.getText(reusableToken);
          final int start = scanner.yychar();
          reusableToken.setStartOffset(start);
          reusableToken.setEndOffset(start+reusableToken.termLength());
          // This 'if' should be removed in the next release. For now, it converts
          // invalid acronyms to HOST. When removed, only the 'else' part should
          // remain.
          if (tokenType == StandardTokenizerImpl.ACRONYM_DEP) {
            if (replaceInvalidAcronym) {
              reusableToken.setType(StandardTokenizerImpl.TOKEN_TYPES[StandardTokenizerImpl.HOST]);
              reusableToken.setTermLength(reusableToken.termLength() - 1); // remove extra '.'
            } else {
              reusableToken.setType(StandardTokenizerImpl.TOKEN_TYPES[StandardTokenizerImpl.ACRONYM]);
            }
          } else {
            reusableToken.setType(StandardTokenizerImpl.TOKEN_TYPES[tokenType]);
          }
          return reusableToken;
        } else
          // When we skip a too-long term, we still increment the
          // position increment
          posIncr++;
      }
    }
               ......
}


测试代码:

public class TestAnalyzer {

	final static String TEXT = "hadoop is very good,xina a tooken finished!"; 
	
	@SuppressWarnings("deprecation")
	public void testTokenizer() throws IOException{
		Reader reader = new StringReader(TEXT);
		StandardTokenizer tokenizer = new StandardTokenizer(reader);
		for (Token t = tokenizer.next();t!=null;t = tokenizer.next()) {
			System.out.println(t.startOffset() +"--" + t.endOffset() + ": "+ t.termText());
		}
	}
	
	public static void main(String[] args) throws IOException {
		TestAnalyzer t = new TestAnalyzer();
		t.testTokenizer();
	}
}

//lucene2.4.1新API的测试用法:
		TokenStream ts = analyzer.tokenStream("text", new StringReader(txt));
		for(Token t= new Token(); (t=ts.next(t)) !=null;) {
			System.out.println(t);
		}



分享到:
评论

相关推荐

    Lucene分词器资源包

    **Lucene分词器资源包详解** Lucene是一款开源的全文搜索引擎库,广泛应用于Java开发中,用于构建高效、可扩展的信息检索应用。这个压缩包提供了Lucene分词时所必需的jar包,使得开发者能够方便地在项目中集成...

    Lucene-Demo.rar Lucene分词的demo

    `lucene`目录很可能包含了Lucene的库文件,这些文件包含了Lucene的核心组件,如索引和搜索模块,以及各种分词器。在Java项目中,开发者通常会将这些库文件作为依赖引入,以便使用Lucene提供的API进行文本处理。 `...

    lucene中文分词器(paoding解牛)

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

    lucene.NET 中文分词

    2. **配置分词器**:在Lucene.NET的索引创建阶段,需要配置Analyzer类,指定使用特定的分词器。例如,使用IK Analyzer可以创建`IKAnalyzer analyzer = new IKAnalyzer();`。 3. **字段分析**:在创建Document对象时...

    Lucene4.0 IK分词器使用pdf

    ### Lucene4.0 IK分词器使用概览 #### IKAnalyzer:中文分词利器 IKAnalyzer是一款基于Java开发的开源中文分词工具包,自2006年首次发布以来,历经多个版本的迭代,已成为业界广泛认可的中文分词解决方案。其最初...

    lucene+中文IK分词器 例子

    **Lucene+中文IK分词器实例解析** Lucene是一个高性能、全文检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。在处理中文文本时,由于中文词汇的复杂性和无...

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

    为了增强Lucene在中文环境下的表现,需要对Lucene的默认分析器进行扩展,引入中文分词器。常见的中文分词器有: - **Jieba分词**:一款流行的开源中文分词工具,支持精确模式和搜索引擎模式。 - **IK分词**:针对...

    lucene.net中文分词器

    通过阅读和分析代码,开发者可以了解到如何在Lucene.NET中集成自定义分词器,以及如何实现最大向前匹配算法的具体细节。这为其他开发者提供了参考和学习的机会,也是促进技术交流的一个良好途径。 总结来说,这个...

    Lucene分词与查询详解

    **Lucene分词与查询详解** Lucene是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发中。它提供了一套强大的API,用于索引文本数据,并执行复杂的查询操作。在深入理解Lucene的分词与查询机制之前,我们...

    lucene3庖丁解牛中文分词器

    《深入剖析:Lucene3与庖丁解牛中文分词器》 在信息技术飞速发展的今天,全文检索和搜索引擎已经成为日常开发中不可或缺的部分。Lucene作为一款强大的全文检索库,被广泛应用于各种信息检索系统中。然而,对于中文...

    java lucene 实现分词和词干抽取

    用java实现的,利用了lucene里面的standardAnalyzer分析器实现的分词,可以去停用词,再利用波特算法实现 词干提取 最后排序 和词频统计输出

    IKAnalyzer和Lucene分词工具下载地址+使用方法

    System.out.println("当前使用的分词器:" + analyzer.getClass().getSimpleName()); TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(keyWord)); tokenStream.addAttribute...

    compass2.1.4包+所用lucene包+中文分词器

    "中文分词器"在这里指的可能是 "je-analysis-1.5.1.jar",这是一个专门针对中文的分析工具,用于将中文文本分解成有意义的词汇(词)。Je-Analysis 可能是基于 Java 实现的,适用于 Lucene 和 Solr 等搜索引擎,它...

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

    2. **配置分析器**:在LuceneUtils.java或LuceneDB.java中,需要配置合适的中文分词分析器。例如,使用IK Analyzer,代码可能如下: ```java Analyzer analyzer = new IKAnalyzer(); ``` **三、创建索引** 1. *...

    lucene中文分词工具包

    总之,“lucene中文分词工具包”通过IKAnalyzer提供的高效分词服务,为中文信息检索、文本挖掘、情感分析等应用提供了强大的支持。理解并掌握其工作原理和使用方法,对于提升中文文本处理的质量至关重要。

    Lucene分词查询

    **Lucene分词查询**是搜索引擎开发中的关键一环,它是Apache Lucene库的核心功能之一。Lucene是一个高性能、全文本搜索库,为Java开发者提供了强大的文本搜索能力。在这个入门实例中,我们将深入理解如何利用Lucene...

    lucene、solr中文分词器

    它们提供了强大的信息检索和文本分析功能,但Lucene默认的分词器并不适用于中文处理。因此,对于中文索引和搜索,我们需要引入专门针对中文的分词器。本篇文章将深入探讨Lucene和Solr中的中文分词器及其重要性。 ...

    Lucene3.0分词系统.doc

    Lucene3.0分词系统的核心在于理解和应用其分词原理,无论是对于英文还是中文文本,这一过程都是构建高效搜索引擎的基础。以下是对Lucene3.0分词系统中涉及的关键知识点的深入解析。 ### 英文分词原理 英文分词相较...

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

    4. 分词处理:在索引文档时,先用庖丁分词器对中文文本进行分词,然后将分词结果转换成Lucene的Term对象,再添加到索引中。 5. 搜索优化:在搜索阶段,同样可以使用庖丁分词器对用户输入的查询进行预处理,提高搜索...

Global site tag (gtag.js) - Google Analytics