文章目录
- 自然语言处理系列二十
- 分词工具实战
- 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(),"|"));
/**
* 输出分词结果:
分布式|机器|学习|实战|人工智能|科学|与|技术|丛书|深入浅出|逐步|讲解|分布式|机器|学习|的|框架|及|应用|配套|个性化|推荐|算法|系统|人|脸|识别|对话|机器人|等|实战|项目
*/
}
}
中文分词是自然语言处理的基础,很多应用场景都需要先对文本做中文分词处理,然后再做进一步的模型训练。中文分词结果分出的词是有词性的,比如大家熟悉的名词、动词、形容词等,那么词性是如何识别和标注的呢?接下来给大家详细讲解词性标注。
总结