Java 开源中文分词器Ansj 学习教程
Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词器,Paoding分词器,smartcn分词器,HanLP分词器。
不同的分词器有不同的用法,定义的接口也不一样,至于效果哪个好,那要结合自己的应用场景自己来判断。
这里我就主要介绍Ansj中文分词器,它是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,比其他常用的开源分词工具(如MMseg4j)的分词准确率更高,目前实现了.中文分词. 中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能,适用于对分词效果要求高的各种项目。
其Github地址为https://github.com/NLPchina/ansj_seg,上面有较详细的说明。
一、依赖注入
首先添加ansj的maven依赖(目前最高版本是5.1.6):
<!-- 开源中文分词器Ansj -->
<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/
二、调用方式
1. 基本分词-BaseAnalysis
基本就是保证了最基本的分词.词语颗粒度最非常小的,所涉及到的词大约是10万左右,
基本分词速度非常快,在macAir上.能到每秒300w字每秒,同时准确率也很高.但是对于新词他的功能十分有限。
简单的示例代码:
public static void main(String[] args) {long startTime = System.currentTimeMillis();String text = "20个左边的卡罗拉倒车镜! ";Result analysisedResult = BaseAnalysis.parse(text);long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("基本分词: " + analysisedResult + "(" + time + "ms)");}
输出的结果:
基本分词: 20/m,个/q,左边/f,的卡/n,罗/j,拉/v,倒车镜/n,!/w, (1871ms)
可以看到分词后会在词语的后边加上对应词语的词性
如何不输出词性,仅输出词?
可以在后面加上.toStringWithOutNature()
public static void main(String[] args) {long startTime = System.currentTimeMillis();String text = "20个左边的卡罗拉倒车镜! ";String analysisedText = BaseAnalysis.parse(text).toStringWithOutNature();long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("基本分词: " + analysisedText + "(" + time + "ms)");}
输出的结果:
基本分词: 20,个,左边,的卡,罗,拉,倒车镜,!, (1990ms)
可以看到现在后面的词性没有了,只输出了词
2. 精准分词-ToAnalysis
它在易用性,稳定性.准确性.以及分词效率上.都取得了一个不错的平衡。
如果你初次赏识Ansj如果你想开箱即用.那么就用这个分词方式是不会错的。
简单的示例代码:
public static void main(String[] args) {long startTime = System.currentTimeMillis();String text = "20个左边的卡罗拉倒车镜! ";String analysisedText = ToAnalysis.parse(text).toStringWithOutNature();long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("精准分词: " + analysisedText + "(" + time + "ms)");}
输出的结果:
精准分词: 20个,左边,的卡,罗拉,倒车镜,!, (1856ms)
3. nlp分词-NlpAnalysis
nlp的适用方式:语法实体名抽取.未登录词整理.只要是对文本进行发现分析等工作
简单的示例代码:
public static void main(String[] args) {long startTime = System.currentTimeMillis();String text = "20个左边的卡罗拉倒车镜! ";String analysisedText = NlpAnalysis.parse(text).toStringWithOutNature();long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("nlp分词: " + analysisedText + "(" + time + "ms)");}
输出的结果:
nlp分词: 20个,左边,的,卡,罗拉,倒车镜,!, (2712ms)
4. 面向索引的分词-IndexAnalysis
面向索引的分词,故名思议就是适合在lucene等文本检索中用到的分词。
主要考虑以下两点:
召回率是对分词结果尽可能的涵盖。比如对“上海虹桥机场南路” 召回结果是[上海/ns, 上海虹桥机场/nt, 虹桥/ns, 虹桥机场/nz, 机场/n, 南路/nr]
准确率其实这和召回本身是具有一定矛盾性的Ansj的强大之处是很巧妙的避开了这两个的冲突 。比如我们常见的歧义句“旅游和服务”->对于一般保证召回 。大家会给出的结果是“旅游 和服 服务” 对于ansj不存在跨term的分词。意思就是。召回的词只是针对精准分词之后的结果的一个细分。比较好的解决了这个问题
简单的示例代码:
public static void main(String[] args) {long startTime = System.currentTimeMillis();String text = "20个左边的卡罗拉倒车镜! ";String analysisedText = IndexAnalysis.parse(text).toStringWithOutNature();long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("面向索引的分词: " + analysisedText + "(" + time + "ms)");}
输出的结果:
面向索引的分词: 20个,左边,的卡,罗拉,倒车镜,!, (1825ms)
5. 四种方式比较
四种方式功能统计如下:
三、 停词器
停用词需求是一种及其常见的需求,好处很多很多,令人惊讶的是坏处比好处还多,所以一般情况下不要用这个,比较耗费cpu
第一步实例化停用器
第二步调用过滤:
如下面的三种形式的过滤(用精准分词来举例)
1. 过滤词性(insertStopNatures())
简单的示例代码:
public static void main(String[] args) {long startTime = System.currentTimeMillis();StopRecognition stopRecognition = new StopRecognition();String text = "20个左边的卡罗拉倒车镜! ";//剔除标点符号(w)stopRecognition.insertStopNatures("w");String analysisedText = ToAnalysis.parse(text).recognition(stopRecognition).toStringWithOutNature().replaceAll(","," ");long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("精准分词: " + analysisedText + "(" + time + "ms)");}
输出的结果:
精准分词: 20个 左边 的卡 罗拉 倒车镜 (1974ms)
从结果可以看到句中的感叹号已经被剔除了
2. 过滤单词(insertStopWords())
简单的示例代码:
public static void main(String[] args) {long startTime = System.currentTimeMillis();StopRecognition stopRecognition = new StopRecognition();String text = "20个左边的卡罗拉倒车镜! ";//剔除指定的分词stopRecognition.insertStopWords("20个");String analysisedText = ToAnalysis.parse(text).recognition(stopRecognition).toStringWithOutNature().replaceAll(","," ");long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("精准分词: " + analysisedText + "(" + time + "ms)");}
输出的结果:
精准分词: 左边 的卡 罗拉 倒车镜 ! (2089ms)
从结果可以看到20个已经被剔除了
3. 支持正则表达式(insertStopRegexes())
简单的示例代码:
public static void main(String[] args) {long startTime = System.currentTimeMillis();StopRecognition stopRecognition = new StopRecognition();String text = "20个左边的卡罗拉倒车镜! ";//剔除指定的分词stopRecognition.insertStopRegexes("倒车.*?");String analysisedText = ToAnalysis.parse(text).recognition(stopRecognition).toStringWithOutNature().replaceAll(","," ");long endTime = System.currentTimeMillis();long time = endTime - startTime;System.out.println("精准分词: " + analysisedText + "(" + time + "ms)");}
简单的示例代码:
精准分词: 20个 左边 的卡 罗拉 ! (2004ms)
从结果可以看到“倒车镜”已经被剔除了
参考:
AnsjSeg使用手册
Java 开源中文分词器Ansj 学习教程相关推荐
- JAVA开源中文分词器Ansj(依赖注入+调用方式+停词器)
Java有11大开源中文分词器,分别是word分词器,Ansj分词器,Stanford分词器,FudanNLP分词器,Jieba分词器,Jcseg分词器,MMSeg4j分词器,IKAnalyzer分词 ...
- 11大Java开源中文分词器的使用方法和分词效果对比,当前几个主要的Lucene中文分词器的比较...
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- 11大Java开源中文分词器的使用方法和分词效果对比
2019独角兽企业重金招聘Python工程师标准>>> 本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了1 ...
- 【分词器】11大Java开源中文分词器的使用方法和分词效果对比
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- 11大Java开源中文分词器的使用方法和分词效果对比(转)
原文出处: 杨尚川 本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码 ...
- [024] 11大Java开源中文分词器的使用方法和分词效果对比
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- Java开源中文分词器的使用方法和分词效果对比
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- 【NLP】11大Java开源中文分词器的使用方法和分词效果对比
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- IKAnalyzer - 开源中文分词器
https://code.google.com/archive/p/ik-analyzer/ 源项目作者 linliangyi2007@gmail.com 已不再维护,个人可以fork项目进行修改,g ...
最新文章
- python 字典过滤
- dma接收双缓存 stm32_「STM32学习笔记」USART 新特性
- java 在数组末尾添加元素_Java快问快答:用 ArrayList 还是 LinkedList?
- 推荐系统--矩阵分解(5)
- 【转载保存】ExecutorService中submit和execute的区别
- 搭建FastDFS分布式文件存储系统教程
- 使用php语言 统计字符串,php如何查询字符串长度
- 新疆克拉玛依有没有考计算机一级的,新疆维吾尔自治区克拉玛依2018年3月计算机等级考试公告...
- 《正版 图解语音识别 语音识别入门实践教程 语音识别技术书 人工智能机器学习深度学习计算机网络编程书籍R3Z978》[日]荒木雅弘著【摘要 书评 在线阅读】-苏宁易购图书...
- 【初级01】java JVM核心技术(1):字节码、类加载器、GC机制
- 在linux中安装Jupyter notebook
- python与或非运算规则_Python逻辑运算符之与或非
- 亚马逊多账号操作如何判断关联
- mysql怎么生成db文件_如何使mysql生成.db文件
- java实现最大公约数
- html5网页录音插件Recorder
- nginx-GET /favicon.ico HTTP/1.1
- git 清除版本库中的忽略文件
- 通过webSocket实现app产生的数据在网页实时显示
- 安装opensips时创建MySQL表_Centos7.6安装opensips并实现通话成功