`

Lucene的基本分词过程

 
阅读更多

一、Analyzer

       Analyzer类是所有分词器的基类,它是个抽象类,所有的子类必须实现

@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
     return new TokenStreamComponents;
   }

   

    TokenStreamComponents有两个构造方法

Analyzer.TokenStreamComponents(Tokenizer source)

Analyzer.TokenStreamComponents(Tokenizer source, TokenStream result)

 二、TokenStream

    TokenStream能够产生语汇单元序列的类,有两个类型的子类TokenFilter和Tokenizer

    1.Tokenizer是通过读取字符串创建语汇单元的 

    2.TokenFilter封装另个TokenStream去处理语汇单元,产生新的语汇单元

三、构造一个分析器理解分析链的顺序很重要

        看Lunene In Action书上写的,也不知道是不是这样理解的?

public class StopAnalyzer2 extends Analyzer {

	private Set stopWords;
	
	public StopAnalyzer2(){
		stopWords=StopAnalyzer.ENGLISH_STOP_WORDS_SET;
	}
	public StopAnalyzer2(String[] stopWords){
		this.stopWords=StopFilter.makeStopSet(Version.LUCENE_42, stopWords);
	}
	@Override
	protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
	    //首先转换为小写的流
		Tokenizer t=new LowerCaseTokenizer(Version.LUCENE_42,arg1);
          //转换后用处理去除顿词
		   return new TokenStreamComponents(t, new StopFilter(Version.LUCENE_42, t, (CharArraySet) stopWords));
		
//  TokenFilter tt=new LowerCaseFilter(Version.LUCENE_42, new LetterTokenizer(Version.LUCENE_42, arg1));
//   return new TokenStreamComponents(null,new StopFilter(Version.LUCENE_42, tt, (CharArraySet) stopWords));
	}
//结果看是否能把大写The过滤掉
	public static void main(String[] args) throws IOException {
		AnalyzerUtils.displayTokes(new StopAnalyzer2(), "The I love you");
	}

}

 结果:

 修改后

	@Override
	protected TokenStreamComponents createComponents(String arg0, Reader arg1) {

		TokenStream filter=new StopFilter(Version.LUCENE_42, new LetterTokenizer(Version.LUCENE_42, arg1), (CharArraySet) stopWords);
		   return new TokenStreamComponents(t,new LowerCaseFilter(Version.LUCENE_42, filter));

	}

 结果:

 四、对不同分次器做的比较

        书上的Util类这个是在网上找的

public class AnalyzerUtils {
    public static void displayTokes(Analyzer analyzer,String text) throws IOException{
    	displayTokes(analyzer.tokenStream("contents", new StringReader(text)));
    }
    
    public static void displayTokes(TokenStream tokenStream) throws IOException{
    	 CharTermAttribute termAttribute = tokenStream.addAttribute(CharTermAttribute.class);
    	 tokenStream.reset();  //此行,不能少,不然会报 java.lang.ArrayIndexOutOfBoundsException
 
   	     PositionIncrementAttribute posIncr=tokenStream.addAttribute(PositionIncrementAttribute.class);
   	     OffsetAttribute o=tokenStream.addAttribute(OffsetAttribute.class);
   	     TypeAttribute type=tokenStream.addAttribute(TypeAttribute.class);
    	 while(tokenStream.incrementToken()){
    		 System.out.print("["+termAttribute.toString()+"  "+o.startOffset()+"->"+o.endOffset()+" "+type.type()+"]");
    		 
    	 }
    
//    	 while(tokenStream.incrementToken()){
//    		 System.out.print("["+termAttribute.toString()+"  "+"]");
//    		 
//    	 }
    }
}

 

  • 大小: 7.3 KB
  • 大小: 8.5 KB
分享到:
评论

相关推荐

    Lucene-Demo.rar Lucene分词的demo

    **正文** ...通过深入研究这个Demo,开发者不仅可以理解Lucene的基本用法,还能掌握如何在实际项目中整合和优化分词过程。对于那些对自然语言处理或信息检索感兴趣的开发者来说,这是一个极好的学习资源。

    Lucene3.0分词系统.doc

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

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

    以上就是使用Lucene进行中文分词搜索的基本流程。在实际应用中,还需要考虑诸如性能优化、近实时搜索、多线程索引和搜索等问题。此外,LuceneDB.java可能包含了与数据库交互的部分,将数据库中的数据导入到Lucene...

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

    - **文档**:是Lucene中的基本存储单位,由多个字段组成。 - **字段**:包含具体的文本内容,是文档的组成部分。 - **索引**:Lucene通过构建倒排索引来提高搜索效率。倒排索引是一种数据结构,它将每个词映射到包含...

    转 Lucene中文分词组件 JE-Analysis 1.5.1 天狼

    通过这些接口,开发者可以灵活地控制分词过程,比如设置不同的分词模式,或者调整分词器的参数以适应不同的应用场景。 在下载的压缩包中,"META-INF"目录包含了组件的元数据信息,这些信息对于Java的类加载机制至关...

    lucene.net中文分词器

    最大向前匹配算法是一种常见的中文分词策略,其基本思想是从待分词的字符串的开头,尝试用已知的词典中的最长词进行匹配,并不断向前移动,直到无法找到更长的匹配为止。该算法简单高效,适用于大部分中文文本处理...

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

    - **运行效率**:测量分词过程的时间消耗,以及对Lucene整体性能的影响。 - **与现有方法的比较**:与其他流行的中文分词工具(如Jieba分词等)进行对比,分析各自的优缺点。 通过实验数据可以看出,基于Lucene的...

    Lucene.Net +盘古分词 搜索引擎

    4. **创建Document**:Document是Lucene.Net中的基本数据结构,代表一个要索引的文档。添加字段(Field)来存储文档内容,如标题、内容等。 5. **索引文档**:使用IndexWriter将Document写入索引。 6. **关闭资源**...

    分词器LUcene

    同时,分词器的性能也有所提升,减少了分词过程中的内存消耗和计算时间。 为了使用和定制Lucene的分词器,开发者需要了解如何配置和调用相应的API。例如,可以通过设置Analyzer类来指定使用的分词器,然后通过...

    中文搜索分词lucene包+paoding包

    在中文处理方面,Lucene虽然内置了一些基本的分词功能,但是对于复杂的中文词汇和短语,其原生的分词效果可能不够理想。这就需要引入专门针对中文的分词工具。 Paoding,又名“庖丁”,是专门为Java平台设计的一个...

    运用在lucene中的中文分词算法源码

    Analyzer负责整个分词过程,TokenStream则表示一系列的Token(词元)。通过阅读Analyzer子类的实现,可以了解如何初始化分词器,以及如何根据输入文本生成TokenStream。 例如,在jieba分词器的源码中,可以看到如何...

    Lucene建立索引jar包和Paoding分词jar包

    下面将详细介绍Lucene和Paoding分词在构建索引过程中的关键知识点。 一、Lucene的索引机制 Lucene的核心在于它的倒排索引结构。这种结构允许快速地找到包含特定词汇的文档。在建立索引时,Lucene会对输入的文档进行...

    lucene最新版本3.3的基本功能用法(IK分词是3.2.8)

    3. 分词处理:在3.3版本中,Lucene提供了基本的分词功能,但通常需要与其他分词器结合使用以提高搜索效果。 二、IK分词器3.2.8 1. IK分词器简介:IK (Intelligent Chinese Analyzer) 是一个针对中文的开源分词工具...

    Lucene3.0.3+盘古分词(证实可用,可指定使用自己的词库文件).rar

    在本压缩包中提供的DLL文件是盘古分词的接口,用于与Lucene进行交互,将分词结果应用到Lucene的索引和搜索过程中。词库文件则包含了预定义的词汇,是盘古分词进行分词的基础。 在实际使用中,开发者可以根据需求...

    lucene-core-2.3.0 lucene-core2.4.0以及极易分词器 jar包

    Lucene 是一个开源的全文检索库,由Apache软件基金会维护,它为开发人员提供了高级文本搜索功能。...在使用这些组件时,开发者需要具备一定的Lucene知识和Java编程能力,同时也需要了解中文分词的基本原理和实践技巧。

    lucene基本包

    这个“lucene基本包”包含了Lucene的核心组件,是理解和使用Lucene进行信息检索的基础。 1. **全文检索引擎架构** Lucene的核心理念是建立索引,以便快速查找文档中的信息。它通过将文本数据转换成便于搜索的结构...

    lucene in action源码

    通过深入研究《Lucene in Action》的源码,开发者不仅可以理解Lucene的基本工作原理,还能学习如何实际应用这些知识,解决具体的搜索问题。对于初学者而言,这是一个很好的起点,可以帮助他们快速上手并逐步掌握全文...

    IK分词器集成lucene4.5使用方法

    2. **配置Analyzer**:在Lucene的索引创建和搜索过程中,需要定义Analyzer。对于IKAnalyzer,可以这样配置: ```java import org.apache.lucene.analysis.cn.ik.IKAnalyzer; Analyzer analyzer = new IKAnalyzer();...

    lucene简单教程poading中文分词.pdf

    Paoding 提供了易于使用的接口,可以在 Lucene 的索引和搜索过程中实现对中文文本的分词处理。 ### 中文分词器配置 在使用 Paoding 分词器时,需要配置相应的字典文件路径和分词参数,以确保分词的效果。例如,...

Global site tag (gtag.js) - Google Analytics