`
ld_hust
  • 浏览: 170317 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于lucene的分词(二)

阅读更多

Luceneanalyisis包下的Standard包下的StandardAnalyzer()功能很强大,而且支持CJK分词,我们简要说一下.

此包下的文件是有StandardTokenizer.jj经过javac命令生成的.由于是机器自动生成的代码,可能可读性很差,想了解的话好好看看那个StandardTokenizer.jj文件就会比较明了了.

Lucene常用的Analyzer功能概述.

WhitespaceAnalyzer:仅仅是去除空格,对字符没有lowcase,不支持中文

SimpleAnalyzer:功能强于WhitespaceAnalyzer,将除去letter之外的符号全部过滤掉,并且将所有的字符lowcase,不支持中文

StopAnalyzer:StopAnalyzer的功能超越了SimpleAnalyzer,在SimpleAnalyzer的基础上
   
增加了去除StopWords的功能,不支持中文

StandardAnalyzer:英文的处理能力同于StopAnalyzer.支持中文采用的方法为单字切分.

ChineseAnalyzer:来自于Lucenesand box.性能类似于StandardAnalyzer,缺点是不支持中英文混和分词.

CJKAnalyzer:chedong写的CJKAnalyzer的功能在英文处理上的功能和StandardAnalyzer相同
   
但是在汉语的分词上,不能过滤掉标点符号,即使用二元切分

TjuChineseAnalyzer:我写的,功能最为强大.TjuChineseAnlyzer的功能相当强大,在中文分词方面由于其调用的为ICTCLASjava接口.所以其在中文方面性能上同与ICTCLAS.其在英文分词上采用了LuceneStopAnalyzer,可以去除 stopWords,而且可以不区分大小写,过滤掉各类标点符号.

各个Analyzer的功能已经比较介绍完毕了,现在咱们应该学写Analyzer,如何diy自己的analyzer??

如何DIY一个Analyzer

咱们写一个Analyzer,要求有一下功能

(1)    可以处理中文和英文,对于中文实现的是单字切分,对于英文实现的是以空格切分.

(2)    对于英文部分要进行小写化.

(3)    具有过滤功能,可以人工设定StopWords列表.如果不是人工设定,系统会给出默认的StopWords列表.

(4)    使用P-stemming算法对于英文部分进行词缀处理.

代码如下:

public final class DiyAnalyzer

    extends Analyzer

{

private Set stopWords;

public static final String[] CHINESE_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",

      "", "我们"

};

public DiyAnalyzer()

{

    this.stopWords=StopFilter.makeStopSet(CHINESE_ENGLISH_STOP_WORDS);

}

 

public DiyAnalyzer(String[] stopWordList)

{

    this.stopWords=StopFilter.makeStopSet(stopWordList);

}

 

public TokenStream tokenStream(String fieldName, Reader reader)

{

    TokenStream result = new StandardTokenizer(reader);

    result = new LowerCaseFilter(result);

 

    result = new StopFilter(result, stopWords);

    result = new PorterStemFilter(result);

    return result;

}

 

public static void main(String[] args)

{

    //好像英文的结束符号标点.,StandardAnalyzer不能识别

    String string = new String("我爱中国,我爱天津大学!I love China!Tianjin is a City");

    Analyzer analyzer = new DiyAnalyzer();

    TokenStream ts = analyzer.tokenStream("dummy", new StringReader(string));

    Token token;

    try

    {

      while ( (token = ts.next()) != null)

      {

        System.out.println(token.toString());

      }

    }

    catch (IOException ioe)

    {

      ioe.printStackTrace();

    }

}

}

可以看见其后的结果如下:

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,1,2,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,2,3,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,3,4,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,6,7,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,7,8,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,8,9,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,9,10,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,10,11,<CJK>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(i,12,13,<ALPHANUM>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(love,14,18,<ALPHANUM>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(china,19,24,<ALPHANUM>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(tianjin,25,32,<ALPHANUM>,1)

Token's (termText,startOffset,endOffset,type,positionIncrement) is:(citi,39,43,<ALPHANUM>,1)

分享到:
评论

相关推荐

    lucene分词测试代码

    用java写的图形分词测试的小东西,用的分词器是: 来自“猎图网 www.richmap.cn”基于IKAnalyzer分词算法的准商业化Lucene中文分词器,其使用“正向全切分算法”,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I...

    Lucene-Demo.rar Lucene分词的demo

    这个名为"Lucene-Demo.rar"的压缩包提供了一个基于Lucene的分词演示项目,可以帮助开发者快速理解和应用Lucene的分词功能。在这个压缩包中,有两个主要的文件:`lucene`目录和`Lucene-Demo`文件。 `lucene`目录很...

    Lucene中文分词器包

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

    lucene.NET 中文分词

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

    Lucene分词器资源包

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

    简单的LUCENE分词

    在JAVA下,用lucene的内置分词功能对XML文件进行分词,并取消无用词

    lucene分词包

    lucene自带的中文分词器,将jar放入编译路径即可使用

    Lucene分词与查询详解

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

    Lucene中文分词器组件

    2. **配置与初始化**:根据项目需求,配置分词器的参数,如自定义词典、分词模式等,然后在Lucene的Analyzer中实例化该分词器。 3. **索引建立**:在创建索引时,使用配置好的分词器对中文文本进行分词,生成分词后...

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

    《深入理解Lucene 6.6:拼音与IK中文分词技术详解》 在信息检索领域,Lucene作为一款强大的全文搜索引擎库,被广泛应用。在处理中文文本时,分词是至关重要的一步,它决定了搜索的精度和效果。本文将详细讲解如何在...

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

    ### Lucene与中文分词技术的研究及应用 #### Lucene简介与原理 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它为开发者提供了构建全文搜索引擎的能力,而无需关注底层搜索机制的具体实现...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-21.Lucene分词器2 共9页.pptx

    共6页19.Lucene过滤 共4页20.Lucene分词器1 共3页21.Lucene分词器2 共9页22.Lucene分词器3 共4页23.Lucene项目实战1 共6页24.Lucene项目实战2 共6页25.Lucene项目实战3 共6页26.Lucene项目实战4 共6页27.Lucene项目...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-20.Lucene分词器1 共3页.pptx

    共6页19.Lucene过滤 共4页20.Lucene分词器1 共3页21.Lucene分词器2 共9页22.Lucene分词器3 共4页23.Lucene项目实战1 共6页24.Lucene项目实战2 共6页25.Lucene项目实战3 共6页26.Lucene项目实战4 共6页27.Lucene项目...

    Lucene中文分词源码详解

    Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu之类的搜索引 擎,还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql...

    google,lucene分词包

    google ,lucene分词应该是最好的分词工具

    java lucene 实现分词和词干抽取

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

    基于lucene的分词

    java代码,基于Lucene和mysql的简单的字符串匹配分词系统

    lucene中文分词工具包

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

    Lucene3.0分词系统.doc

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

Global site tag (gtag.js) - Google Analytics