IKAnalyzer是一个开源基于JAVA语言的轻量级的中文分词第三方工具包,采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式。
1、采用IKSegmenter进行独立IK分词
(1)直接读取字符串
package org.algorithm;
import java.io.IOException;
import java.io.StringReader;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
public class IKAnlyzerDemo {
/*
* 采用IKSegmenter进行独立IK分词
* */
public static String getAnalyzer(String str){
String result = "";
if(str == null){ //如果str为空,返回空值
return result;
}
try{
StringReader sr = new StringReader(str); //直接使用 StringReader 读取字符串
IKSegmenter ik = new IKSegmenter(sr, true); //true智能切分
Lexeme lex = null;
while((lex=ik.next())!=null){
System.out.print(lex.getLexemeText()+"| ");
}
}catch(IOException e){
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
String str ="IK Analyzer是一个开源的,基于java语言" +
"开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, " +
"IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为" +
"应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版" +
"本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时" +
"提供了对Lucene的默认优化实现";
getAnalyzer(str);
}
}
(2)读取字节
package org.algorithm;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
public class IKAnalyzerDemo01 {
/*
* 采用IKSegmenter进行独立IK分词
* */
public static String getIKAnalyzer(String str){
String result = "";
if(str == null){
return result;
//System.out.print(str);
}
try{
byte[] bt = str.getBytes();//将字符串转换为字节类型
ByteArrayInputStream is = new ByteArrayInputStream(bt);//将字节转换成字节流
Reader reader = new InputStreamReader(is);//InputStreamReader读取的是字节流,所以首先将字符流转换成字节流
IKSegmenter ik = new IKSegmenter(reader, true);
Lexeme lex = null;//lexeme就是分词器分出来的词
while((lex = ik.next())!=null){
result = lex.getLexemeText()+"| ";
System.out.print(result);
}
}catch(IOException e){
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
String str = "IK Analyzer是一个开源的,基于java语言" +
"开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, " +
"IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为" +
"应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版" +
"本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时" +
"提供了对Lucene的默认优化实现";
getIKAnalyzer(str);
}
}
Output:
ik| analyzer| 是| 一个| 开源| 的| 基于| java| 语言| 开发| 的| 轻量级| 的| 中文| 分词| 工具包| 从| 2006年| 12月| 推出| 1.0版| 开始| ikanalyzer| 已经| 推| 出了| 4个| 大| 版本| 最初| 它| 是以| 开源| 项目| luence| 为| 应用| 主体| 的| 结合| 词典| 分词| 和| 文法| 分析| 算法| 的| 中文| 分词| 组件| 从| 3.0| 版本| 开始| ik| 发展为| 面向| java| 的| 公用| 分词| 组件| 独| 立于| lucene| 项目| 同时| 提供| 了| 对| lucene| 的| 默认| 优化| 实现|
2、基于lucene实现IK分词
package org.algorithm;
import java.io.IOException;
import java.io.StringReader;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class IKAnalyzerDemo02 {
/*
* 基于lucene实现IK分词
* */
@SuppressWarnings("resource")
public static String getIKAnalyzer(String str){
String result = "";
if(str == null){
return result;
}
try{
Analyzer analyzer = new IKAnalyzer(true);//true智能分词
StringReader reader = new StringReader(str);//读取字符串
TokenStream ts = analyzer.tokenStream("", reader);
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
while(ts.incrementToken()){
System.out.print(term.toString()+"|");
}
reader.close();
System.out.println();
}catch(IOException e){
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
String str = "IK Analyzer是一个开源的,基于java语言" +
"开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, " +
"IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为" +
"应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版" +
"本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时" +
"提供了对Lucene的默认优化实现";
getIKAnalyzer(str);
}
}
Output:
ik| analyzer| 是| 一个| 开源| 的| 基于| java| 语言| 开发| 的| 轻量级| 的| 中文| 分词| 工具包| 从| 2006年| 12月| 推出| 1.0版| 开始| ikanalyzer| 已经| 推| 出了| 4个| 大| 版本| 最初| 它| 是以| 开源| 项目| luence| 为| 应用| 主体| 的| 结合| 词典| 分词| 和| 文法| 分析| 算法| 的| 中文| 分词| 组件| 从| 3.0| 版本| 开始| ik| 发展为| 面向| java| 的| 公用| 分词| 组件| 独| 立于| lucene| 项目| 同时| 提供| 了| 对| lucene| 的| 默认| 优化| 实现|