1.参考文档
2.介绍
是一个ictclas的java实现.基本上重写了所有的数据结构和算法.词典是用的开源版的ictclas所提供的.并且进行了部分的人工优化
内存中中文分词每秒钟大约100万字(速度上已经超越ictclas)
文件读取分词每秒钟大约30万字
准确率能达到96%以上
目前实现了.中文分词. 中文姓名识别 . 用户自定义词典
可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目.
3.demo
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;
import java.util.*;
public class AnsjTest {
public static void test() {
//只关注这些词性的词
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");
}};
String str = "欢迎使用ansj_seg,(ansj中文分词)在这里如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!" ;
Result result = ToAnalysis.parse(str); //分词结果的一个封装,主要是一个List<Term>的terms
System.out.println(result.getTerms());
List<Term> terms = result.getTerms(); //拿到terms
System.out.println(terms.size());
for(int i=0; i<terms.size(); i++) {
String word = terms.get(i).getName(); //拿到词
String natureStr = terms.get(i).getNatureStr(); //拿到词性
if(expectedNature.contains(natureStr)) {
System.out.println(word + ":" + natureStr);
}
}
}
public static void main(String[] args) {
test();
}
}
4.自定义用户词典
1、在项目目录/src/main/resources下创建文件夹library,并在该文件夹下添加userLibrary.dic文件:
userLibrary.dic文件中,自定义字典格式为:
这是 r 1000
一个 r 1000
西红柿女郎 r 1000
其中 r表示当前词语的词性,1000为词频,可自行设置。
注意:
1)、词典各字段之间使用tab(\t)分割,如“这是 r 1000”三个字段之间的间隔是一个tab分隔符。
2)、词性需小写(如n)。
2、在项目目录/src/main/resources下创建文件library.properties,并设置内容
userLibrary=/library/userLibrary.dic
isRealName=true
3、在运行文件中修改方法:
orest = Library.makeForest(AnsjUtils.class.getResourceAsStream("/library/userLibrary.dic"));
Result result = NlpAnalysis.parse(str, forest);
endind…