首先需要导入:lucene-analyzers.jar
下面代码分词的详解:
import java.io.Reader;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.StopFilter;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.cn.ChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
/**
* 一元分词和二元拆词
* @author zhouguohui
*/
public class AnalyzerTest {
public static void main(String[] args) throws Exception{
String str = "测试一元分词和二元拆词拆分汉子,字母,数字等";
Standard_Analyzer(str);
Chiniese_Analyzer(str);
CJK_Analyzer(str);
}
public static void Standard_Analyzer(String str) throws Exception{
Analyzer analyzer = new StandardAnalyzer();
Reader r = new StringReader(str);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
System.out.println("=====StandardAnalyzer 默认没有词只有字(一元分词)====");
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}
public static void Chiniese_Analyzer(String str) throws Exception{
Analyzer analyzer = new ChineseAnalyzer();
Reader r = new StringReader(str);
TokenFilter tf = (TokenFilter) analyzer.tokenStream("", r);
System.out.println("=====chinese analyzer 基本等同StandardAnalyzer(一元分词)====");
Token t;
while ((t = tf.next()) != null) {
System.out.println(t.termText());
}
}
public static void CJK_Analyzer(String str) throws Exception{
Analyzer analyzer = new CJKAnalyzer();
Reader r = new StringReader(str);
StopFilter sf = (StopFilter) analyzer.tokenStream("", r);
System.out.println("=====CJKAnalyzer 交叉双字分割(二元分词)====");
Token t;
while ((t = sf.next()) != null) {
System.out.println(t.termText());
}
}
}
运行结果为:
=====StandardAnalyzer 默认没有词只有字(一元分词)====
测
试
一
元
分
词
和
二
元
拆
词
拆
分
汉
子
字
母
数
字
等
=====chinese analyzer 基本等同StandardAnalyzer(一元分词)====
测
试
一
元
分
词
和
二
元
拆
词
拆
分
汉
子
字
母
数
字
等
=====CJKAnalyzer 交叉双字分割(二元分词)====
测试
试一
一元
元分
分词
词和
和二
二元
元拆
拆词
词拆
拆分
分汉
汉子
字母
数字
字等
这两者没有什么太大的区别,第二种对中文分词支持的效果更好一些