分词器常常用来做用户输入的分析,完后再检索数据库
一、IK Analyzer简介
- IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包;
- 最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件;从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立亍 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化;
二、IK的使用
- 添加Maven引用
<dependency> <groupId>com.github.magese</groupId> <artifactId>ik-analyzer</artifactId> <version>7.5.0</version> </dependency>
- 添加配置文件
- 添加字典文件:extword.dict,主要用来把一些想分出来的词添加到这里,还有一个添加辅助行词语的文件:stopword.dict,详见码云项目
- IKAnalyzer.cfg.xml
<?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">classpath:extword.dict</entry> <!-- 配置自己的忽略词 --> <entry key="ext_stopwords">classpath:stopword.dic</entry> </properties>
- 编写代码
package org.shreker.tools.ikanalyzer; 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 IKWordSplition { private static String WordSplition(String sentence) throws IOException { StringBuilder text = new StringBuilder(); // 创建分词对象 Analyzer analyzer = new IKAnalyzer(true); StringReader reader = new StringReader(sentence); // 分词 TokenStream tokenStream = analyzer.tokenStream("", reader); CharTermAttribute charTerm = tokenStream.getAttribute(CharTermAttribute.class); // 遍历分词数据 tokenStream.reset(); while (tokenStream.incrementToken()) { text.append(charTerm.toString()).append("|"); } tokenStream.close(); reader.close(); return text.toString().trim() + "\n"; } public static void main(String[] args) throws IOException { System.out.println(WordSplition("张北京儿童医院几年解决痘痘")); } }
- 运行结果:
Load extended dictionary:extword.dict Load stopwords dictionary:stopword.dic 张|北京|儿童医院|几年|解决|痘痘|
- 运行结果: