IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。( J, v0 z" p7 O/ q. h2 }3 v
IKAnalyzer3.0特性:' t- V X. V0 h
- 采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和最大词长两种切分模式;具有83万字/秒(1600KB/S)的高速处理能力。
- 采用了多子处理器分析模式,支持:英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符
- 优化的词典存储,更小的内存占用。支持用户词典扩展定义
- 针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐);引入简单搜索表达式,采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。0 }" }$ h/ J, S3 U
使用方法:# H6 V% j- N+ A; E
引入 ikanalyzer相关jar包,将以下依赖加入工程的pom.xml中的<dependencies>...</dependencies>部分。
/ C+ u: m( q" w/ D" A' E9 u9 _
- <dependency>
- <groupId>org.wltea.ik-analyzer</groupId>
- <artifactId>ik-analyzer</artifactId>
- <version>3.2.8</version>
- </dependency>
- /**
- * @Description:
- * @Version: 1.0
- */
- import org.wltea.analyzer.core.IKSegmenter;
- import org.wltea.analyzer.core.Lexeme;
-
- import java.io.IOException;
- import java.io.StringReader;
- import java.util.*;
-
- public class Test {
- /**
- * 对语句进行分词
- * @param text 语句
- * @return 分词后的集合
- * @throws IOException
- */
- private static Map segment(String text) throws IOException {
- Map<String,Integer> map = new HashMap<String,Integer>();
- StringReader re = new StringReader(text);
- IKSegmenter ik = new IKSegmenter(re, false);//true 使用smart分词,false使用最小颗粒分词
- Lexeme lex; while ((lex = ik.next()) != null) { if(lex.getLexemeText().length()>1){ if(map.containsKey(lex.getLexemeText())){ map.put(lex.getLexemeText(),map.get(lex.getLexemeText())+1); }else{ map.put(lex.getLexemeText(),1); } } } return map; } public static void main(String[] args) throws IOException { Map<String,Integer> map = segment("中国,中国,我爱你"); System.out.println(map.toString()); } }
输出结果:
: ~% U& w7 q% G7 [ 整理简单工具类,代码如下:
* D3 O' o2 v& d7 P0 j l# _3 j/ Y
/ ]. I$ j/ f* u* n( U i) C C1 a
IKanalyzer分词器源码下载>>
& C% _7 ~8 M3 i" w8 H% A2 | ? |