Lucene内置的Analyzer分词器
写这篇博客的时候自己在已经读到第六章分词器了,在写代码之前,这个分词器,让我起了浓厚的兴趣。
//===========================================================================================//
以下四条分词器适用于英文,不适用于中文
//===========================================================================================//
1、WhitespaceAnalyzer
仅仅是去除空格,对字符没有lowcase化,不支持中文;
并且不对生成的词汇单元进行其他的规范化处理。
2、SimpleAnalyzer
功能强于WhitespaceAnalyzer, 首先会通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式。该分析器会去掉数字类型的字符。
3、StopAnalyzer
StopAnalyzer的功能超越了SimpleAnalyzer,在SimpleAnalyzer的基础上增加了去除英文中的常用单词(如the,a等),也可以更加自己的需要设置常用单词;不支持中文
4、StandardAnalyzer
英文的处理能力同于StopAnalyzer.支持中文采用的方法为单字切分。他会将词汇单元转换成小写形式,并去除停用词和标点符号。
//=============================================================================================//
以下2条分词器适用于中文
//==============================================================================================//
5、CJKAnalyzer
中日韩分析器,能对中,日,韩语言进行分析的分词器,但是对中文支持效果一般,一般不用
6、SmartChineseAnalyzer
对中文支持稍好,但扩展性差,扩展词库,禁用词库和同义词库等不好处理
5、CJKAnalyzer
中日韩分析器,能对中,日,韩语言进行分析的分词器,但是对中文支持效果一般,一般不用
简单的测试:
网络代码:
//=========================================================================//
/**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);
}
}
中日韩分析器,能对中,日,韩语言进行分析的分词器,但是对中文支持效果一般,一般不用
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。