Ansj分词工具详细使用
api文档:http://nlpchina.github.io/ansj_seg/
四种分词方法:
基本分词:
List<Term> parse = BaseAnalysis.parse("腾讯公司的员工非常多,有40678个员工,老板是马化腾,现在也开始搞区块链了"); System.out.println(parse);
ToAnalysis 精准分词:兼顾精度与速度,比较均衡
List<Term> parse = ToAnalysis.parse("腾讯公司的员工非常多,有40678个员工,老板是马化腾,现在也开始搞区块链了"); System.out.println(parse);
NLP分词:分词能力更强,但是速度较慢。
List<Term> parse = NlpAnalysis.parse("腾讯公司的员工非常多,有40678个员工,老板是马化腾,现在也开始搞区块链了"); System.out.println(parse);
IndexAnalysis分词:一般用于检索或搜索引擎
List<Term> parse = IndexAnalysis.parse("腾讯公司的员工非常多,有40678个员工,老板是马化腾,现在也开始搞区块链了"); System.out.println(parse);
通病:词典过时,需要补充新词,同时没有自带的停用词表,需要自己添加停用词表。在上面的分词中,都没有识别区块链三个字,都是拆分了,没有识别出来。
添加自定义词典:(前提:工程是maven项目)
一.Ansj自带办法:
Ansj自带方法添加新词,但是只能一个一个添加。
UserDefineLibrary.insertWord("区块链", "n", 1000);//添加自定义词汇、自定义词性 UserDefineLibrary.removeWord("区块链");//去除自定义词汇
二.利用配置文件添加自定义词表
1.在resources目录下添加配置文件:library.properties。添加内容:
userLibrary=/library/userLibrary.dic #此行为自定义词典的位置和名称 isRealName=true
2.在resources目录下新家library目录,再在其中添加userLibrary.dic文件,主要注意的是文件的格式是:词语内容 词性 词频,例如:区块链 n 1000,中间间隔的是tab制表符。
3.代码声明变量配置:
String str = "腾讯公司的员工非常多,有40678个员工,老板是马化腾,现在也开始搞区块链了"; Forest forest= Library.makeForest(Ansj.class.getResourceAsStream("/library/userLibrary.dic"));//加载字典文件 String resultstr= NlpAnalysis.parse(str, forest).toStringWithOutNature(); System.out.println(resultstr);
目录结构如下:
添加自定义停用词表:(前提:工程是maven项目)
Ansj只有自带方法一个一个添加停用词,没有通过配置添加的方法(也许是我没有看到,如果您看到,可以补充在评论中),但是我们需要的停用词都很多,所以只能自己写方法读写文档来添加停用词。这里就不在赘述,就是java方法读取文件,在利用自带方法来添加。
StopRecognition s = new StopRecognition(); s.insertStopWords(“个”); String str = "腾讯公司的员工非常多,有40678个员工,老板是马化腾,现在也开始搞区块链了"; Forest forest= Library.makeForest(Ansj.class.getResourceAsStream("/library/userLibrary.dic"));//加载字典文件 String resultstr= NlpAnalysis.parse(str, forest).recognition(s).toStringWithOutNature();
更多的关于Ansj的方法可以查看api文档,链接:http://nlpchina.github.io/ansj_seg/