警告
官方说明如下:
歧义纠正是Ansj分词的最后最后的大招了。杀伤力巨大。谨慎使用。极可能造成其他的错误。
提出问题
在本网站中,搜索 报错,无法搜索到下面3条记录:
- hbase java 代码建表报错:RpcRetryingCallerImpl — Call exception, tries=7, retries=16, started=17044
- python2.7unicode转gbk时报错UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\xa0’
- vue教程-组件的属性名不能是key,会报错:”key” is a reserved attribute and cannot be used as component prop.
即使将 报错 添加到 用户词库 中,也无法搜到到
是因为分词时,优先分成其他的词了
- 上面第1条记录,优先分词为:
表报,确有该词,可自行百度 - 上面第2条记录,优先分词为:
时报,确有该词,可自行百度 - 上面第3条记录,优先分词为:
会报,确有该词,可自行百度
代码验证错误
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.library.AmbiguityLibrary;
import org.ansj.library.DicLibrary;
import org.ansj.splitWord.analysis.DicAnalysis;
import org.ansj.util.MyStaticValue;
import java.util.Iterator;
/**
* 加载歧义词库
*/
public class Test5 {
public static void main(String[] args) {
Result result = DicAnalysis.parse("python2.7unicode转gbk时报错UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\\xa0’");
Iterator<Term> it = result.iterator();
while(it.hasNext()){
Term t = it.next();
System.out.println(t.getName());
}
}
解决方式一(不完美)
定义 用户词库 :
报错 n 1000
可以处理上面第1条、第3条,但无法处理第2条
解决方式二(完美)
此时,可通过 歧义词典 解决
介绍
详见官网:
http://nlpchina.github.io/ansj_seg/
创建歧义词典文件
创建文件:ambiguity.dict,内容如下:
二维 n
二维数组 n
二次 n
报错 v
加载歧义词典文件
private void loadLibrary() throws Exception {
File config = PathUtils.getWebInfPath("/userLibrary.dict");
// forest = Library.makeForest(config.getPath());
MyStaticValue.putLibrary(DicLibrary.DEFAULT, config.getPath());
File ambiguity = PathUtils.getWebInfPath("/ambiguity.dict");
MyStaticValue.putLibrary(AmbiguityLibrary.DEFAULT, ambiguity.getPath(), AmbiguityLibrary.get());
System.out.println("加载用户词库完毕!");
}
完整代码
import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.library.AmbiguityLibrary;
import org.ansj.library.DicLibrary;
import org.ansj.splitWord.analysis.DicAnalysis;
import org.ansj.util.MyStaticValue;
import java.util.Iterator;
/**
* 加载歧义词库
*/
public class Test5 {
public static void main(String[] args) {
MyStaticValue.putLibrary(DicLibrary.DEFAULT, "D:\\mym\\baidu2\\web\\WEB-INF\\userLibrary.dict");
MyStaticValue.putLibrary(AmbiguityLibrary.DEFAULT, "D:\\mym\\baidu2\\web\\WEB-INF\\ambiguity.dict", AmbiguityLibrary.get());
System.out.println("加载用户词库完毕!");
Result result = DicAnalysis.parse("python2.7unicode转gbk时报错UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\\xa0’");
Iterator<Term> it = result.iterator();
while(it.hasNext()){
Term t = it.next();
System.out.println(t.getName());
}
}
}
参考:
https://blog.csdn.net/bohu83/article/details/103503374
https://blog.csdn.net/PancrasBohemian/article/details/80309687