美文网首页
中文分词器 ~ IK Analyzer

中文分词器 ~ IK Analyzer

作者: 帅可儿妞 | 来源:发表于2018-11-10 15:40 被阅读16次

分词器常常用来做用户输入的分析,完后再检索数据库

一、IK Analyzer简介

  1. IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包;
  2. 最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件;从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立亍 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化;

二、IK的使用

  1. 添加Maven引用
    <dependency>
        <groupId>com.github.magese</groupId>
        <artifactId>ik-analyzer</artifactId>
        <version>7.5.0</version>
    </dependency>
    
  2. 添加配置文件
    • 添加字典文件: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>
      
  3. 编写代码
    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
      张|北京|儿童医院|几年|解决|痘痘|
      

三、代码

相关文章

网友评论

      本文标题:中文分词器 ~ IK Analyzer

      本文链接:https://www.haomeiwen.com/subject/smmzxqtx.html