ansj 歧义词典 作者:马育民 • 2024-03-02 22:45 • 阅读:10044 # 警告 官方说明如下: > 歧义纠正是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 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 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 原文出处:https://malaoshi.top/show_1IX7Fktg2cHV.html