分词工具-ansj

Ansj 分词工具

如今,自然语言处理技术越来越成熟,越来越得到大家关注。许多互联网公司,如京东,阿里,新美大等互联网公司都有大量的文本评论数据,如何从这些文本中挖掘出有效的信息成为关键,这就需要应用自然语言处理技术,而对文本分词是自然语言处理的第一步,很关键。分词工具有很多NLPIRIKAnalyzerstanford nlp等等,本篇博文将介绍我所使用的分词工具 Ansj 的使用。

准备工作

<!-- 增加新的maven源 -->   
<repositories>
    <repository>
        <id>mvn-repo</id>
        <url>http://maven.nlpcn.org/</url>
    </repository>
</repositories>


<dependencies>
    ....

    <dependency>
        <groupId>org.ansj</groupId>
        <artifactId>ansj_seg</artifactId>
        <version>5.0.1</version>
    </dependency>
    ....
</dependencies>

示例演示

先来看一个简单的的 demo 演示。

  • Demo
import org.ansj.splitWord.analysis.ToAnalysis;
import org.junit.Test;

/**
 * Created by lionel on 16/11/17.
 */
public class AnsjTest {
    @Test
    public void test(){
        String text="中新网11月17日电 据外媒报道,日本首相安倍晋三称,有机会在唐纳德•特朗普获得美国大选胜利后,成为第一个与他会晤的外国领导人是“莫大的荣幸”,并表示希望在他们之间建立信任关系。报道称,特朗普与安倍或将于当地时间17日傍晚在纽约会谈。";
        System.out.println(ToAnalysis.parse(text));
    }
}
  • 分词结果:

这里写图片描述

可以发现,文本已经分好词了,但是有些分词就不是很满意,如“中新网”就是一个网站名,应该就是一个词,又比如说安倍晋三是一个人名,应该就是一个词。要想解决这个问题就要加入自己的词库。

  • 自定义词库
    现有以下词库:

名字词库(name.dic)

李连杰
刘德华
安倍晋三
唐纳德.特兰普

媒体词库(media.dic)

中新网
新华网

以上两个词库我直接放在 resources 文件夹下。
通过UserDefineLibrary类中的静态方法 insertWord()来加载自己的词库。

  • 示例代码
import org.ansj.domain.Term;
import org.ansj.library.UserDefineLibrary;
import org.ansj.splitWord.analysis.ToAnalysis;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;

/**
 * Created by lionel on 16/11/17.
 */
public class TextSegment {
    static {
        loadDictionary("/media.dic", "media");
        loadDictionary("/name.dic", "name");
    }

    /**
     *  从本地文件加载词库,并打上对应的标签,名字词库对应的词性是 name;媒体词库对应的词性是 media
     *
     * @param dic    本地词库路径
     * @param speech 词性
     */
    public static void loadDictionary(String dic, String speech) {
        try {
            InputStream is = TextSegment.class.getResourceAsStream(dic);
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = reader.readLine()) != null) {
                String token = line.replaceAll("[\\r\\n]", "").trim();
                UserDefineLibrary.insertWord(token, speech, 1000);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 实现分词
     *
     * @param text 文本
     * @return 分词后的文本
     */
    public static List<Term> parse(String text) {
        if (text == null || text.length() == 0) {
            return null;
        }

        return ToAnalysis.parse(text);
    }
}
  • 分词结果:

这里写图片描述

从两次的分词结果比较结果可以看出,我们的词库已经起到了作用,对应的姓名和媒体都已经是单独的一个词了,而且词性也是自定义的词性。如,中新网/media,安倍晋三/name等等。这样就可以根据词性获取需要的信息了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值