IKAnalyzer

Posted 春文秋武

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IKAnalyzer相关的知识,希望对你有一定的参考价值。

我们的项目中中文切词使用的是mmseg,有一个不满意的地方是jar包中的默认词典一定会被加载进去,当我对有些term有意见时,无法删除。

mmseg中Dictionary.java里一段代码保证了/data/words.dic的加载,我无法提供自己的进行替换。

//try load words.dic in jar
InputStream wordsDicIn = this.getClass().getResourceAsStream("/data/words.dic");
if(wordsDicIn != null) {
    File wordsDic = new File(this.getClass().getResource("/data/words.dic").getFile());
    loadWord(wordsDicIn, dic, wordsDic);
}

而IKAnalyzer就比较自由,既可以增加自己的词典,也能指定删除默认词典中的词。

        String text = "给我讲一个黄色笑话";
        Configuration cfg = DefaultConfig.getInstance();
        Dictionary.initial(cfg);
        //将"黄色笑话"从默认词典中删除
        Dictionary.getSingleton().disableWords(Arrays.asList("黄色笑话"));

        StringReader sr = new StringReader(text);

        IKSegmenter ik = new IKSegmenter(sr, true);
        Lexeme lex;
        while ((lex = ik.next()) != null) {
            System.out.print(lex.getLexemeText() + "|");
        }

输出:给我讲一个|黄色|笑话

如何增加新词呢?

DefaultConfig类会默认加载根目录下的配置文件IKAnalyzer.cfg.xml

<properties>

    <comment>IK Analyzer 扩展配置</comment>
    <!-- 用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">ik.add.dic</entry>
    <!-- 用户可以在这里配置自己的扩展停止词字典    -->
    <!--entry key="ext_stopwords">/dicdata/ext_stopword.dic</entry-->

</properties>

其中ext_dict就是用于添加自定义的扩展词典。  

  

以上是关于IKAnalyzer的主要内容,如果未能解决你的问题,请参考以下文章

java分词工具-ANSJ与IKAnalyzer比较分析

Lucene使用IKAnalyzer分词实例 及 IKAnalyzer扩展词库

IKAnalyzer 配置到服务器

Solr配置中文分词器IKAnalyzer及增删改查调用

solr 7.x 配置ikanalyzer

IKAnalyzer进行中文分词和去停用词