1.首先添加ansj的maven依赖
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.1.2</version>
</dependency>
2.使用ansj测试分词
public class WordSegmentTest {
@Test
public void wordTest(){
String str = "这是一段测试文字";
Result result=NlpAnalysis.parse(str);
List<Term> termList=result.getTerms();
for(Term term:termList){
System.out.println(term.getName()+":"+term.getNatureStr());
}
}
}
输出结果:
这:r
是:v
一段:m
测试:vn
文字:n
假如想把‘这是’当做一个词来分,可以使用以下两种方法:
(1)使用DicLibrary添加自定义分词
public class WordSegmentTest {
@Test
public void wordTest(){
String str = "这是一段测试文字";
DicLibrary.insert(DicLibrary.DEFAULT, "这是");//设置自定义分词
Result result=NlpAnalysis.parse(str);
List<Term> termList=result.getTerms();
for(Term term:termList){
System.out.println(term.getName()+":"+term.getNatureStr());
}
}
}
输出结果:
这是:userDefine
一段:m
测试:vn
文字:n
(2)官方给出的方法一:
在resource目录下创建library文件夹,然后在该文件夹下创建userLibrary.dic字典文件
在userLibrary.dic文件中添加自定义分词:
这是 r 1000
这里假设‘这是’的词性是r
在resource目录下创建library.properties,在配置文件中配置userLibraryuserLibrary=library/userLibrary.dic
但是直接测试发现并没有起作用,然后查资料,需要Library加载自定义字典文件,完成Forest的实例化,分词时再将forest对象传入才生效:
public class WordSegmentTest {
@Test
public void wordTest(){
Forest forest = null;
try {
forest=Library.makeForest(WordSegmentTest.class.getResourceAsStream("/library/userLibrary.dic"));//加载字典文件
String str = "这是一段测试文字";
Result result=NlpAnalysis.parse(str,forest);//传入forest
List<Term> termList=result.getTerms();
for(Term term:termList){
System.out.println(term.getName()+":"+term.getNatureStr());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果:
这是:r
一段:m
测试:vn
文字:n
参考:
http://nlpchina.github.io/ansj_seg/
http://bbs.csdn.net/topics/391492653
http://www.cnblogs.com/en-heng/p/6274881.html