《JAVA篇》-- IK分词器

本文介绍了IKAnalyzer这个Java分词器,它是Apache提供的,并在Maven项目中如何配置和使用。通过示例代码展示了如何进行智能和最细粒度分词,并且讲解了如何自定义字典以增强分词效果。此外,还提供了项目目录结构和参考文献。
摘要由CSDN通过智能技术生成

简介

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>

原生态的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();
        }
    }
}

进阶补充,自定义字典

需要创建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>

字典信息:

网红
徐如林
不动如山

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

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

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

参考文献

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

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值