ansj 歧义词典

警告

官方说明如下:

歧义纠正是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