Lucene内置的Analyzer分词器

来源:互联网 发布:工具书软件 编辑:程序博客网 时间:2024/05/16 06:54

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


//===========================================================================================//

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

//===========================================================================================//

1、WhitespaceAnalyzer

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

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


2、SimpleAnalyzer

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


3、StopAnalyzer

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


4、StandardAnalyzer

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




//=============================================================================================//

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

//==============================================================================================//



5、CJKAnalyzer

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




6、SmartChineseAnalyzer

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



7、CJKAnalyzer

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


8、JE分词

这是一套由JAVA写的分词器,可以识别更多的词。



//=========================================================================//

简单的测试:

  网络代码:

//=========================================================================//



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 0
原创粉丝点击