文章目录

  • 自然语言处理系列二十
  • 分词工具实战
  • Java的mmseg4j分词
  • 总结


自然语言处理系列二十

分词工具实战

分词工具有Java、Python、C++实现的,这里给大家推荐目前最流行的分词工具。CRF++是采用C++语言编写,但可以用Python来调用。HanLP是用Java编写的,也可以用Python调用。IK分词和mmseg4j分词也是用Java编写,经常集成在搜索引擎Solr和Elasticsearch里。下面分别进行讲解这几个开源分词包。

Java的mmseg4j分词

mmseg4j用Chih-Hao Tsai 的MMSeg算法实现的Java中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j已经实现了这两种分词算法。 在公司项目里使用一般主要是集成到Solr搜索项目里。后面我们讲搜索引擎的时候会继续讲怎么和Solr集成。这里我们先对它做单独分词示例,不依赖于Lucene和Solr:
首先在你的Java项目添加Maven依赖如下所示:

<dependency>
    <groupId>com.chenlb.mmseg4j</groupId>
    <artifactId>mmseg4j-core</artifactId>
    <version>1.10.0</version>
</dependency>

mmseg4j分词Java代码如下所示:

package com.ai.analyzer;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import com.chenlb.mmseg4j.Word;
import com.chenlb.mmseg4j.ComplexSeg;
import com.chenlb.mmseg4j.Dictionary;
import com.chenlb.mmseg4j.MMSeg;
import com.chenlb.mmseg4j.Seg;
import com.chenlb.mmseg4j.SimpleSeg;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
/**
 * mmseg4j分词功能演示
 */
public class MMSegDemo {
    public static void main(String[] args) {
        String txt = "分布式机器学习实战(人工智能科学与技术丛书)深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。";
        StringReader input = new StringReader(txt);
        Dictionary dic = Dictionary.getInstance();
        Seg seg = new ComplexSeg(dic);//Complex分词
        //seg = new SimpleSeg(dic);//Simple分词
        MMSeg mmSeg = new MMSeg(input, seg);
        Word word;
        List<String> wordList = Lists.newArrayList();
        try {
            while ((word = mmSeg.next()) != null) {
                //word是单个分出的词,先放到List里下面统一按竖线拼接词打印出来
                wordList.add(word.getString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            input.close();
        }
        System.out.println(StringUtils.join(wordList.toArray(),"|"));
        /**
         * 输出分词结果:
         分布式|机器|学习|实战|人工智能|科学|与|技术|丛书|深入浅出|逐步|讲解|分布式|机器|学习|的|框架|及|应用|配套|个性化|推荐|算法|系统|人|脸|识别|对话|机器人|等|实战|项目
         */
    }
}

中文分词是自然语言处理的基础,很多应用场景都需要先对文本做中文分词处理,然后再做进一步的模型训练。中文分词结果分出的词是有词性的,比如大家熟悉的名词、动词、形容词等,那么词性是如何识别和标注的呢?接下来给大家详细讲解词性标注。

总结