学习天然语言这一段时间以来接触和据说了好多开源的天然语言处理工具,在这里作一下汇总方便本身之后学习,其中有本身使用过的也有了解不是不少的,对于不甚了解的工具之后学习熟悉了会作更新的。html
IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包。从2006.12推出1.0版本开始,IK Analyzer已经推出了多个版本,当前最新版本为2012 u6,最初基于Luence,从3.0开始成为面向Java的公用分词组件,独立于Luence,下载地址为:http://code.google.com/p/ik-analyzer/。IK支持细粒度和智能分词两种切分模式,支持英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符。能够支持用户自定义的词典,经过配置IKAnalyzer.cfg.xml文件来实现,能够配置自定义的扩展词典和停用词典。词典须要采用UTF-8无BOM格式编码,而且每一个词语占一行。配置文件以下所示:java
[html] view plaincopyapp
<properties> 工具
<comment>IK Analyzer 扩展配置</comment> 学习
<!--用户能够在这里配置本身的扩展字典--> ui
<entry key="ext_dict">ext.dic;</entry> google
<!--用户能够在这里配置本身的扩展中止词字典--> 编码
<entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry> spa
</properties> .net
IK部署很简单,只须要把IKAnalyzer2012_u6.jar部署于项目的lib中,同时将IKAnalyzer.cfg.xml文件以及词典文件置于src中,便可经过API的方式开发调用。
示例代码:
[java] view plaincopy
/**
* IK分词功能实现
* @return
*/
public String spiltWords(String srcString){
StringBuffer wordsBuffer = new StringBuffer("");
try{
IKSegmenter ik=new IKSegmenter(new StringReader(srcString), true);
Lexeme lex=null;
while((lex=ik.next())!=null){
// System.out.print(lex.getLexemeText()+" ");
wordsBuffer.append(lex.getLexemeText()).append(" ");
}
}catch(Exception e){
logger.error(e.getMessage());
}
return wordsBuffer.toString();
}
IK简单、易于扩展,分词结果较好而且采用Java编写,由于我平时的项目以Java居多,因此是我平时处理分词的首选工具。
ICTCLAS是由中科院计算所历经数年开发的分词工具,采用C++编写。最新版本命名为ICTCLAS2013,又名为NLPIR汉语分词系统,官网为:http://ictclas.nlpir.org/。主要功能包括中文分词、词性标注、命名实体识别、用户词典功能,同时支持GBK编码、UTF8编码、BIG5编码,新增微博分词、新词发现与关键词提取。能够可视化界面操做和API方式调用。