Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词器,Paoding分词器,smartcn分词器,HanLP分词器。

不同的分词器有不同的用法,定义的接口也不一样,至于效果哪个好,那要结合自己的应用场景自己来判断。

这里我就主要介绍Ansj中文分词器,它是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如MMseg4j)的分词准确率更高,目前实现了.中文分词. 中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能,适用于对分词效果要求高的各种项目。

其Github地址为https://github.com/NLPchina/ansj_seg,上面有较详细的说明。

1.依赖注入
首先添加ansj的maven依赖(目前最高版本是5.1.6):

  <dependency><groupId>org.ansj</groupId><artifactId>ansj_seg</artifactId><version>5.1.6</version></dependency>

注:访问 https://oss.sonatype.org/content/repositories/releases/org/ansj/ansj_seg/ 可查看或下载最新版 ansj_seg/

2.调用方式
1.基本分词-BaseAnalysis
基本就是保证了最基本的分词.词语颗粒度最非常小的,所涉及到的词大约是10万左右,
基本分词速度非常快,在macAir上.能到每秒300w字每秒,同时准确率也很高.但是对于新词他的功能十分有限。

简单的示例代码:

String ruiec = "腾讯公司的员工非常多,有40678个员工,老板是马化腾";
System.out.println("基本分词:"+BaseAnalysis.parse(ruiec));

输出的结果:

可以看到分词后会在词语的后边加上对应词语的词性
如何不输出词性,仅输出词?
可以在后面加上.toStringWithOutNature()

String ruiec = "腾讯公司的员工非常多,有40678个员工,老板是马化腾";
System.out.println("基本分词:"+BaseAnalysis.parse(ruiec).toStringWithOutNature());

输出的结果:

可以看到现在后面的词性没有了,只输出了词

2.精准分词-ToAnalysis
它在易用性,稳定性.准确性.以及分词效率上.都取得了一个不错的平衡。
如果你初次赏识Ansj如果你想开箱即用.那么就用这个分词方式是不会错的。

简单的示例代码:

String ruiec = "腾讯公司的员工非常多,有40678个员工,老板是马化腾";
System.out.println("精准分词:"+ToAnalysis.parse(ruiec).toStringWithOutNature());

输出的结果:

3.nlp分词-NlpAnalysis
nlp的适用方式:语法实体名抽取.未登录词整理.只要是对文本进行发现分析等工作

简单的示例代码:

String ruiec = "腾讯公司的员工非常多,有40678个员工,老板是马化腾";
System.out.println("nlp分词:"+NlpAnalysis.parse(ruiec).toStringWithOutNature());

输出结果:

4.面向索引的分词-IndexAnalysis
面向索引的分词,故名思议就是适合在lucene等文本检索中用到的分词。
主要考虑以下两点:
召回率召回率是对分词结果尽可能的涵盖。比如对“上海虹桥机场南路” 召回结果是[上海/ns, 上海虹桥机场/nt, 虹桥/ns, 虹桥机场/nz, 机场/n, 南路/nr]

准确率其实这和召回本身是具有一定矛盾性的Ansj的强大之处是很巧妙的避开了这两个的冲突 。比如我们常见的歧义句“旅游和服务”->对于一般保证召回 。大家会给出的结果是“旅游 和服 服务” 对于ansj不存在跨term的分词。意思就是。召回的词只是针对精准分词之后的结果的一个细分。比较好的解决了这个问题

简单的示例代码:

String ruiec = "腾讯公司的员工非常多,有40678个员工,老板是马化腾";
System.out.println("面向索引的分词:"+ IndexAnalysis.parse(ruiec).toStringWithOutNature());

输出结果:

5.四种方式比较
把四种方式的输出合起来对比

可以得到基本分词最耗时,面向索引分词速度最快,四种方式功能统计如下:

3.停词器
停用词需求是一种及其常见的需求,好处很多很多,令人惊讶的是坏处比好处还多,所以一般情况下不要用这个,比较耗费cpu

第一步实例化停用器:

简单的示例代码:

StopRecognition s = new StopRecognition();

第二步调用过滤:

如下面的三种形式的过滤(用精准分词来举例)

1.过滤词性(insertStopNatures())
简单的示例代码:

String ruiec = "汇新云公司的员工非常优秀,约有100名员工,请问大Boss是李伽慧吗?";//剔除标点符号(w)
s.insertStopNatures("w");
ToAnalysis.parse(ruiec).recognition(s).toStringWithOutNature().replaceAll(","," ");

输出的结果:

从结果可以看到句中的问号已经被剔除了
2. 过滤单词(insertStopWords())
简单的示例代码:

String ruiec = "汇新云公司的员工非常优秀,约有100名员工,请问大Boss是李伽慧吗?";
//剔除指定的分词
s.insertStopWords("100名");
ToAnalysis.parse(ruiec).recognition(s).toStringWithOutNature().replaceAll(","," ");

输出的结果:

从结果可以看到100名已经被剔除了

3.支持正则表达式(insertStopRegexes())
简单的示例代码:

String ruiec = "汇新云公司的员工非常优秀,约有100名员工,请问大Boss是李伽慧吗?";
s.insertStopRegexes("请.*?");
ToAnalysis.parse(ruiec).recognition(s).toStringWithOutNature().replaceAll(","," ");

输出的结果:

从结果可以看到“请问”已经被剔除了

JAVA开源中文分词器Ansj(依赖注入+调用方式+停词器)相关推荐

  1. 11大Java开源中文分词器的使用方法和分词效果对比

    2019独角兽企业重金招聘Python工程师标准>>> 本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了1 ...

  2. 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  3. 【分词器】11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  4. 11大Java开源中文分词器的使用方法和分词效果对比(转)

    原文出处: 杨尚川 本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码 ...

  5. [024] 11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  6. Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  7. 【NLP】11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  8. Java 开源中文分词器Ansj 学习教程

    Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词 ...

  9. 基于java的中文分词工具ANSJ

    ANSJ 这是一个基于n-Gram+CRF+HMM的中文分词的java实现. 分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上 目前实现了.中文分词. 中文姓名识别 ...

最新文章

  1. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...
  2. Kali Linux 装好系统后安装经常使用软件
  3. object-c 常见问题
  4. 用setx设置永久环境变量及注意事项
  5. LoadRunner 8.1 学习笔记4
  6. Go基础:格式化输出--Printf、Sprintf、Fprintf
  7. 恢复联想键盘F1-F12标准模式
  8. WPF 基础控件之 DatePicker 样式
  9. LeetCode 200. 岛屿数量(图的遍历)
  10. z3735f android x86,英特尔的Atom Z3735F分析 全文总结_台电 X80HD_平板电脑评测-中关村在线...
  11. 嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!
  12. WARNING:tensorflow:Entity <bound method GRUCell.call of <tensorflow.python.ops.rnn_cell_impl.GRUCell
  13. 使用k-近邻算法进行分类
  14. c++项目 生成dll文件
  15. A股将迎来一大波新经济公司:几家欢喜几家愁
  16. 应届生面试这样准备,最能展现自己优势!
  17. Java语言十五讲(第十四讲 容器框架二)
  18. bios error 装系统acpi_重装系统遇到bios acpi错误。
  19. mysql 输入法表情数据,mysql 5.7 版本输入法表情符问题-----java解决办法
  20. freemark导出word,图片显示问题

热门文章

  1. i7 10700kf和i9 10900kf 哪个好
  2. matlab图标注换行,Matlab的title如何实现换行显示?
  3. 模糊控制之高斯隶属度函数(S7-200 SMART PLC 梯形图篇)
  4. AWS 费用清清楚楚
  5. java html转换mht,在java中,分析如何读取或者解析 MHTML (. mht ) 文件
  6. (Unity)获取图片上的像素点颜色
  7. 《程序设计中的组合数学》——容斥定理
  8. 渲染层网络层错误--微信小程序
  9. 攻防世界 Misc miao~
  10. nuttx link script