提出问题
java多态 是java中重要的概念,应该分成2个词:
java多态
但日常生活中,多态 根本不是词,所以使用 ansj 进行分词时,就会分成下面3个词:
- java
多态
这就导致分词错误
代码验证
public static void main(String[] args) {
Result result = DicAnalysis.parse("java多态");
Iterator<Term> it = result.iterator();
while(it.hasNext()){
Term t = it.next();
System.out.println(t.getName());
}
}
分析问题
让 ansj 加载 特有的词 多态,就能正确识别,进行分词
解决
定义字典文件
在该文件中,定义 特有的词
创建 userLibrary.dict 文件,内容如下:
多态 n 1000
关键 关键 关键:
必须是
tab键 进行间隔,不能是空格。粘贴到 idea 等开发工具时,可能会自动变成空格,必须手动改正如果是英文,必须全小写
词性需小写(如n)
加载词库
方式一:
Forest forest = Library.makeForest("D:\\mym\\baidu2\\out\\artifacts\\baidu2_war_exploded\\WEB-INF\\userLibrary.dict");
方式二:
MyStaticValue.putLibrary(DicLibrary.DEFAULT, "D:\\mym\\baidu2\\out\\artifacts\\baidu2_war_exploded\\WEB-INF\\userLibrary.dict");
分词
方式一:
分词时必须指定上面的 forest
Result result = DicAnalysis.parse("java多态",forest);
方式二:
Result result = DicAnalysis.parse("java多态");
完整代码
方式一:
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.DicAnalysis;
import org.nlpcn.commons.lang.tire.domain.Forest;
import org.nlpcn.commons.lang.tire.library.Library;
public class Test2 {
static Forest forest;
public static void main(String[] args) {
try {
forest = Library.makeForest("D:\\mym\\baidu2\\out\\artifacts\\baidu2_war_exploded\\WEB-INF\\userLibrary.dict");
} catch (Exception e) {
e.printStackTrace();
}
Result result = DicAnalysis.parse("java多态",forest);
Iterator<Term> it = result.iterator();
while(it.hasNext()){
Term t = it.next();
System.out.println(t.getName());
}
}
}
方式二:
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.library.DicLibrary;
import org.ansj.splitWord.analysis.DicAnalysis;
import org.ansj.util.MyStaticValue;
import java.util.Iterator;
public class Test3 {
public static void main(String[] args) {
MyStaticValue.putLibrary(DicLibrary.DEFAULT, "D:\\mym\\baidu2\\out\\artifacts\\baidu2_war_exploded\\WEB-INF\\userLibrary.dict");
Result result = DicAnalysis.parse("java多态");
Iterator<Term> it = result.iterator();
while(it.hasNext()){
Term t = it.next();
System.out.println(t.getName());
}
}
}