IK Analyzer,基于java开发的轻量级的中文分词工具包,是以开源项目Luence为主体的,结合词典分词和文法分析算法的中文分词组件。 IK拥有了特有的“正向迭代最细粒度切分算法”,支持细粒度和智能分词两种切分模式。 项目地址:https://github.com/wks/ik-analyzer 编译并且安装到本地的repository: mvn install -Dmaven.test.skip=true IK的两个重要词典 扩展词典:需要切分的字符串的词语,根据扩展词典里的词,不要切分开来。 停止词典:对比停止词典,直接删掉停止词典中出现的词语。 案例1: 案例2: src/main/resources/IKAnalyzer.cfg.xml src/main/resources/extend.dic src/main/resources/stopword.dic 案例代码IK Analyzer
代码案例
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import java.io.IOException;
import java.io.StringReader;
public class IKAnalyzerDemo01 {
public static void main(String[] args) throws IOException {
String text = "知识、智慧和能力:知识,客观存在的一种规律。智慧,知道在什么样的条件下应用什么样的知识。";
StringReader stringReader = new StringReader(text);
IKSegmenter ikSegmenter = new IKSegmenter(stringReader, true);
Lexeme lexeme = null;
// 遍历分词数据
while ((lexeme = ikSegmenter.next()) != null) {
System.out.print(lexeme.getLexemeText() + " | ");
}
System.out.println();
stringReader.close();
// 知识 | 智慧 | 和 | 能力 | 知识 | 客观存在 | 的 | 一种 | 规律 | 智慧 | 知道 | 在 | 什么样 | 的 | 条件下 | 应用 | 什么样 | 的 | 知识 |
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--配置自己的扩展字典 -->
<entry key="ext_dict">extend.dic;</entry>
<!--配置自己的扩展停止词字典 -->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
客观存在
一种规律
和
的
在
知道
条件下
什么样
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;
import java.io.IOException;
import java.io.StringReader;
public class IKAnalyzerDemo02 {
public static void main(String[] args) throws IOException {
String text = "知识、智慧和能力:知识,客观存在的一种规律。智慧,知道在什么样的条件下应用什么样的知识。";
// 创建分词对象
Analyzer analyzer = new IKAnalyzer(true);
StringReader stringReader = new StringReader(text);
// 分词
TokenStream ts = analyzer.tokenStream("", stringReader);
ts.reset();
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
// 遍历分词数据
while (ts.incrementToken()) {
System.out.print(term.toString() + " | ");
}
System.out.println();
// 知识 | 智慧 | 能力 | 知识 | 客观存在 | 一种规律 | 智慧 | 应用 | 知识 |
stringReader.close();
}
}