1.Paoding
版本: 2.0.4
实现类: PaodingAnalyzer
依赖包: lucene 2.4
使用方法: 主要通过lucene的接口实现,
Analyser#tokenStream方法
切词效果:
传统/意义/意义上/上的/几何/几何学/研究/图形/形的/形状/大/大小/等/性质
备注: paoding的切词会漏字(食字),上面的结果就食了 ‘在’ 字;
总会进行最小粒度切分,只要在词库里有的词组,都会出现。如:之前-->前/之前
2.IK
版本: 3.2.3
实现类:IKSegmentation
依赖包:无,可以不依赖于Lucene直接应用
使用方法:
IKSegmentation ik = new IKSegmentation(new StringReader(str1),
false);// 最少粒度
切分
Lexeme le = null;
while ((le = ik.next()) != null) {
System.out.print(le.getLexemeText() + "/");
}
切词效果:
IK(最小粒度):在/传统/意义上/意义/的/几何学/几何/几/是/研究/图形/的/形状/大小/等/性质/
IK(最大粒度):在/传统/意义上/的/几何学/几/是/研究/图形/的/形状/大小/等/性质/
备注:IK不会食字,
在构造函数的第二个参数可以设定最小粒度和最大粒度,
不依赖于Lucene
但可以看到最大粒度也仍然会有重字的情况,几何学-->几何学/几,分成了两个词。
3.Jeasy/je-analysis-1.5.1.jar/ MMAnalyzer
版本:1.5.1
实现类:MMAnalyzer
依赖包:依赖于Lucene2.4~2.9版本的包
使用方法:
很简单--> MMAnalyzer mm = new MMAnalyzer(); String
result = mm.segment
(str,splitor);
splitor是切词后各词组的分隔符,这里使用'/'
切词效果:传统/意义上/几何学/研究/图形/形状/大小/性质/
备注:
这个不开源的,不过感觉效果比其它都好,
会食字,但不会有重字
4.Ictclas4j
版本:0.9.1
实现类:SegTag
依赖包:无,不依赖于Lucene
使用方法:
SegTag st = new SegTag(1);
SegResult sr = st.split(str);
System.out.println(sr.getFinalResult());
切词效果:在/p 传统/n 意义/n 上/f 的/u 几何学/n 是/a 研究/n
图形/n 的/b 形状/n 大小/a
等/a 性质/n
备注:
这个项目是中科院做的,带词性分析的,原来是c++写的,有人改写成java的
在官网上有几个版本,把项目打包后,还要把项目里的Data文件夹放到应用的项目中才可以用。Data文件夹是保存字典的,一个很大的坏处是:在eclipse里的java文件一定要保存为gbk编码才可以正常运行,utf-8是不能运行的
不会食字,没有重字