赞
踩
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的使用和简单的原理,其他分词器在以后用上的时候在写文章进行详细介绍。
首先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开源中文分词器的使用方法和分词效果对比
如果需要使用其他分词器,可以参考这篇博客。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。