基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。
下载地址:http://code.google.com/p/ik-analyzer/
有操作文档,开发版本更新较快
(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/
没有操作文档,开发版本更新较快
采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析
下载地址:http://code.google.com/p/paoding/
没有操作文档,开发活跃度比较低
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],[中华人民共和国]