发布于 2015-05-14 23:57:24 | 1311 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Lucene教程,程序狗速度看过来!

Apache Lucene全文检索引擎工具包

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。


写这篇博客的时候自己在已经读到第六章分词器了,在写代码之前,这个分词器,让我起了浓厚的兴趣。

以下四条分词器适用于英文,不适用于中文

1、WhitespaceAnalyzer

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

      并且不对生成的词汇单元进行其他的规范化处理。

2、SimpleAnalyzer

    功能强于WhitespaceAnalyzer, 首先会通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式。该分析器会去掉数字类型的字符。

3、StopAnalyzer

    StopAnalyzer的功能超越了SimpleAnalyzer,在SimpleAnalyzer的基础上增加了去除英文中的常用单词(如the,a等),也可以更加自己的需要设置常用单词;不支持中文

4、StandardAnalyzer

    英文的处理能力同于StopAnalyzer.支持中文采用的方法为单字切分。他会将词汇单元转换成小写形式,并去除停用词和标点符号。

以下2条分词器适用于中文

5、CJKAnalyzer

中日韩分析器,能对中,日,韩语言进行分析的分词器,但是对中文支持效果一般,一般不用

6、SmartChineseAnalyzer

对中文支持稍好,但扩展性差,扩展词库,禁用词库和同义词库等不好处理

5、CJKAnalyzer

中日韩分析器,能对中,日,韩语言进行分析的分词器,但是对中文支持效果一般,一般不用

简单的测试:

public class AnalyzerDemo {


/**WhitespaceAnalyzer分析器*/
public void whitespaceAnalyzer(String msg){
WhitespaceAnalyzer analyzer = new WhitespaceAnalyzer(Version.LUCENE_36);
this.getTokens(analyzer, msg);
}

/**SimpleAnalyzer分析器*/
public void simpleAnalyzer(String msg){
SimpleAnalyzer analyzer = new SimpleAnalyzer(Version.LUCENE_36);
this.getTokens(analyzer, msg);
}

/**StopAnalyzer分析器*/
public void stopAnalyzer(String msg){
StopAnalyzer analyzer = new StopAnalyzer(Version.LUCENE_36);
this.getTokens(analyzer, msg);
}

/**StandardAnalyzer分析器*/
public void standardAnalyzer(String msg){
StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
this.getTokens(analyzer, msg);
}


private void getTokens(Analyzer analyzer,String msg){
TokenStream tokenStream=analyzer.tokenStream("content", new StringReader(msg));
this.printTokens(analyzer.getClass().getSimpleName(),tokenStream);
}

private void printTokens(String analyzerType,TokenStream tokenStream){
CharTermAttribute ta = tokenStream.addAttribute(CharTermAttribute.class);
StringBuffer result =new StringBuffer();
try {
while(tokenStream.incrementToken()){
if(result.length()>0){
result.append(",");
}
result.append("["+ta.toString()+"]");
}
} catch (IOException e) {
e.printStackTrace();
}

System.out.println(analyzerType+"->"+result.toString());
}
}

MAIN方法”:

private TokenizerDemo demo = null;

//private String msg = "我喜欢你,我的祖国!china 中国";
private String msg = "I love you, China!B2C";
@Before
public void setUp() throws Exception {
demo=new TokenizerDemo();
}


@Test
public void testWhitespaceAnalyzer(){
demo.whitespaceAnalyzer(msg);
}

@Test
public void testSimpleAnalyzer(){
demo.simpleAnalyzer(msg);
}

@Test
public void testStopAnalyzer(){
demo.stopAnalyzer(msg);
}

@Test
public void testStandardAnalyzer(){
demo.standardAnalyzer(msg);
}
}
5、CJKAnalyzer

中日韩分析器,能对中,日,韩语言进行分析的分词器,但是对中文支持效果一般,一般不用



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务