Lucene之七(开源的中文分析器)

 

当前的中文分析器大致的有以下几个

1、IK Analyzer

   基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

 

   下载地址:http://code.google.com/p/ik-analyzer/

    有操作文档,开发版本更新较快

2、mmseg4j

   (1)、mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。

(2)、MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。

 

下载地址:http://code.google.com/p/mmseg4j/

没有操作文档,开发版本更新较快

3、paoding

   采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析

 

    下载地址:http://code.google.com/p/paoding/

    没有操作文档,开发活跃度比较低

4、imdict

    imdict智能词典所采用的智能中文分词程序

 

    没有操作文档,开发活跃度比较低

 

 

public class ChineseAnalyerDemo {
	
	/**standardAnalyer分析器 ,Lucene内置中文分析器*/
	public void standardAnalyer(String msg){
		StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
		this.getTokens(analyzer, msg);
	}

	
	/**IK Analyzer分析器*/
	public void iKanalyer(String msg){
		IKAnalyzer analyzer = new IKAnalyzer(true);//当为true时,分词器进行最大词长切分
                //IKAnalyzer analyzer = new IKAnalyzer();
		this.getTokens(analyzer, msg);
	}

	
	private void getTokens(Analyzer analyzer,String msg){
		TokenStream tokenStream=analyzer.tokenStream("content", new StringReader(msg));
		try {
			tokenStream.reset();
			this.printTokens(analyzer.getClass().getSimpleName(),tokenStream);
			tokenStream.end();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	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());
	}
}
 
 

 

 

 

public class TestChineseAnalyizer {

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

 

 

输出结果:

 

 

StandardAnalyzer->[我],[喜],[欢],[你],[我],[的],[祖],[国],[china],[中],[国],[i],[love],[you],[中],[华],[人],[民],[共],[和],[国]
IKAnalyzer->[我],[喜欢],[你],[我],[的],[祖国],[china],[中国],[i],[love],[you],[中华人民共和国]
 

 

你可能感兴趣的:(Lucene)