基于ansj_seg的分词实现
Posted nyatom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于ansj_seg的分词实现相关的知识,希望对你有一定的参考价值。
ansj_seg,常用的分词工具,基于Java,简单好用
依赖
mvn依赖如下:
<dependency> <groupId>org.ansj</groupId> <artifactId>ansj_seg</artifactId> <version>5.1.6</version> </dependency>
代码实例
个人做了简单封装,仅供参考
/** * 获取分词后 词组集合 * @param sequence * @return */ public static List<String> segmentor(String sequence) { Result result = ToAnalysis.parse(sequence); List<Term> terms = result.getTerms(); //拿到terms return terms.stream().map(param -> param.getName()).collect(Collectors.toList()); } /** * 获取指定词性的词 * @param sequence * @return */ public static List<String> segmentorNatureFilter(String sequence) { //只关注这些词性的词 Set<String> expectedNature = new HashSet<String>() {{ add("n");add("v");add("vd");add("vn");add("vf"); add("vx");add("vi");add("vl");add("vg"); add("nt");add("nz");add("nw");add("nl"); add("ng");add("userDefine");add("wh"); }}; Result result = ToAnalysis.parse(sequence); //分词结果的一个封装,主要是一个List<Term>的terms List<Term> terms = result.getTerms(); //拿到terms return terms.stream().filter(item -> expectedNature.contains(item.getNatureStr())) .map(item -> (item.getName()+":"+item.getNatureStr())).collect(Collectors.toList()); }
测试
public static void main(String[] args) { String str = "在 Java 7 以前,我们需要根据程序的特性选择对应的即时编译器。对于执?时间较短的,或者\n" + "对启动性能有要求的程序,我们采?编译效率较快的 C1,对应参数 -client。" ; AnsjSegUtils.segmentor(str).stream().forEach(System.out::println); System.out.println("--------------------------"); AnsjSegUtils.segmentorNatureFilter(str).stream().forEach(System.out::println); }
常用词性
# 1. 名词 (1个一类,7个二类,5个三类) 名词分为以下子类: n 名词 nr 人名 nr1 汉语姓氏 nr2 汉语名字 nrj 日语人名 nrf 音译人名 ns 地名 nsf 音译地名 nt 机构团体名 nz 其它专名 nl 名词性惯用语 ng 名词性语素 nw 新词 # 2. 时间词(1个一类,1个二类) t 时间词 tg 时间词性语素 # 3. 处所词(1个一类) s 处所词 # 4. 方位词(1个一类) f 方位词 # 5. 动词(1个一类,9个二类) v 动词 vd 副动词 vn 名动词 vshi 动词“是” vyou 动词“有” vf 趋向动词 vx 形式动词 vi 不及物动词(内动词) vl 动词性惯用语 vg 动词性语素 # 6. 形容词(1个一类,4个二类) a 形容词 ad 副形词 an 名形词 ag 形容词性语素 al 形容词性惯用语 # 7. 区别词(1个一类,2个二类) b 区别词 bl 区别词性惯用语 # 8. 状态词(1个一类) z 状态词 # 9. 代词(1个一类,4个二类,6个三类) r 代词 rr 人称代词 rz 指示代词 rzt 时间指示代词 rzs 处所指示代词 rzv 谓词性指示代词 ry 疑问代词 ryt 时间疑问代词 rys 处所疑问代词 ryv 谓词性疑问代词 rg 代词性语素 # 10. 数词(1个一类,1个二类) m 数词 mq 数量词 # 11. 量词(1个一类,2个二类) q 量词 qv 动量词 qt 时量词 # 12. 副词(1个一类) d 副词 # 13. 介词(1个一类,2个二类) p 介词 pba 介词“把” pbei 介词“被” # 14. 连词(1个一类,1个二类) c 连词 cc 并列连词 # 15. 助词(1个一类,15个二类) u 助词 uzhe 着 ule 了 喽 uguo 过 ude1 的 底 ude2 地 ude3 得 usuo 所 udeng 等 等等 云云 uyy 一样 一般 似的 般 udh 的话 uls 来讲 来说 而言 说来 uzhi 之 ulian 连 (“连小学生都会”) # 16. 叹词(1个一类) e 叹词 # 17. 语气词(1个一类) y 语气词(delete yg) # 18. 拟声词(1个一类) o 拟声词 # 19. 前缀(1个一类) h 前缀 # 20. 后缀(1个一类) k 后缀 # 21. 字符串(1个一类,2个二类) x 字符串 xx 非语素字 xu 网址URL # 22. 标点符号(1个一类,16个二类) w 标点符号 wkz 左括号,全角:( 〔 [ { 《 【 〖〈 半角:( [ { < wky 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { > wyz 左引号,全角:“ ‘ 『 wyy 右引号,全角:” ’ 』 wj 句号,全角:。 ww 问号,全角:? 半角:? wt 叹号,全角:! 半角:! wd 逗号,全角:, 半角:, wf 分号,全角:; 半角: ; wn 顿号,全角:、 wm 冒号,全角:: 半角: : ws 省略号,全角:…… … wp 破折号,全角:—— -- ——- 半角:--- ---- wb 百分号千分号,全角:% ‰ 半角:% wh 单位符号,全角:¥ $ £ ° ℃ 半角:$
以上是关于基于ansj_seg的分词实现的主要内容,如果未能解决你的问题,请参考以下文章