当前位置:   article > 正文

《JAVA篇》-- IK分词器_java分词器

java分词器

简介

java大概有11个大的开源分词器,分别是:

1.word分词器
2.Ansj分词器
3.Stanford分词器
4.FudanNLP分词器
5.Jieba分词器
6.Jcseg分词器
7.MMSeg4j分词器
8.IKAnalyzer分词器(本文要说的)
9.Paoding分词器
10.smartcn分词器
11.HanLP分词器

这里只简单说一下IKAnalyzer的使用和简单的原理,其他分词器在以后用上的时候在写文章进行详细介绍。

Ikanalyzer在Maven项目中的应用

首先pom,这里说一点,如果有什么依赖需要找的,可以去Maven官网进行下载;

        <!-- https://mvnrepository.com/artifact/com.janeluo/ikanalyzer -->
        <dependency>
            <groupId>com.janeluo</groupId>
            <artifactId>ikanalyzer</artifactId>
            <version>2012_u6</version>
        </dependency>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

原生态的Ikanalyzer是apache提供的,这里是调用了一个第三方的封装依赖,提供了更为丰富的一些其他的功能,具体可以到Maven官网看介绍。
代码实例:



import java.io.StringReader;

import org.wltea.analyzer.cfg.DefaultConfig;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;
import org.wltea.analyzer.cfg.Configuration;

/**
 * 测试 IK Analyzer 分词架构中的独立使用分词方法 IK Segmenter
 * 需要加载 IKAnalyzer2012_u6.jar
 * @author zsoft
 */
public class IKSegmenterTest {

    private static Configuration m_wordCut_cfg;


    public String parse(String content, boolean useSmart) throws Exception{
        StringReader sr = new StringReader(content);
        // 参数2为是否使用智能分词
        // true:使用智能分词
        // false:使用最细粒度分词
        IKSegmenter ikSegmenter = new IKSegmenter(sr, useSmart);
        Lexeme word = null;
        String w = null;
        StringBuffer sb = new StringBuffer();
        while((word = ikSegmenter.next()) != null){
            w = word.getLexemeText();
//            int nTtype = word.getLexemeType();
//            if (nTtype == 64) continue;
            if(sb.length() > 0){
                sb.append("|");
            }
            sb.append(w);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        m_wordCut_cfg = DefaultConfig.getInstance();
        System.out.println(m_wordCut_cfg.getQuantifierDicionary());

        String text = "网红徐如林穿着连衣裙来北京了";

        try {
            IKSegmenterTest ikSegmenterTest = new IKSegmenterTest();
            String strs = ikSegmenterTest.parse(text,true);

            System.out.println("使用智能分词结果:"+strs);

            strs = ikSegmenterTest.parse(text, false);

            System.out.println("最细粒度分词结果:"+strs);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

进阶补充,自定义字典

需要创建IKAnalyzer.cfg.xml,和自定义ext.dic字典,如果我们看IKAnalyzer提供给我们的原生字典的话,就会知道,他们分词的依据也来自于大量的字典词汇,而我们要实现自定义扩充字典,也就需要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">ext.dic;</entry>

    <!--用户可以在这里配置自己的扩展停止词字典 -->
<!--    <entry key="ext_stopwords">stopword.dic;org/wltea/analyzer/dic/main2012.dic;</entry>-->
</properties>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

字典信息:

网红
徐如林
不动如山

这样的话,一些人名之类的词汇,也会被分出来,输出结果为:

org/wltea/analyzer/dic/quantifier.dic
加载扩展词典:ext.dic
使用智能分词结果:网红|徐如林|穿着|连衣裙|来|北京|了
最细粒度分词结果:网红|徐如林|如林|穿着|连衣裙|衣裙|来|北京|了

最后补充一下我项目的目录结构
在这里插入图片描述

参考文献

11大Java开源中文分词器的使用方法和分词效果对比
如果需要使用其他分词器,可以参考这篇博客。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/610012
推荐阅读
相关标签
  

闽ICP备14008679号