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";@Beforepublic void setUp() throws Exception {demo=new ChineseAnalyerDemo();}@Testpublic void testStandardAnalyer(){demo.standardAnalyer(msg);}@Testpublic void testIkAnalyzer(){demo.iKanalyer(msg);}}?
?
输出结果:
?
?
StandardAnalyzer->[我],[喜],[欢],[你],[我],[的],[祖],[国],[china],[中],[国],[i],[love],[you],[中],[华],[人],[民],[共],[和],[国]IKAnalyzer->[我],[喜欢],[你],[我],[的],[祖国],[china],[中国],[i],[love],[you],[中华人民共和国]?
?