Java 斯坦福德NLP OpenIE 4错误

Java 斯坦福德NLP OpenIE 4错误,java,nlp,stanford-nlp,Java,Nlp,Stanford Nlp,我遇到了这个错误: 我运行了OpenIE 4.1二进制文件,但出现以下错误: Exception in thread "main" java.lang.NullPointerException at com.googlecode.clearnlp.tokenization.EnglishTokenizer.protec‌​tEmoticons (EnglishTokenizer.java:335) at com.googlecode.clearnlp.tokenization.English

我遇到了这个错误:

我运行了OpenIE 4.1二进制文件,但出现以下错误:

Exception in thread "main" java.lang.NullPointerException at 
com.googlecode.clearnlp.tokenization.EnglishTokenizer.protec‌​tEmoticons
(EnglishTokenizer.java:335) at 
com.googlecode.clearnlp.tokenization.EnglishTokenizer.getTok‌​enList(En 
glishTokenizer.java:109) at 
com.googlecode.clearnlp.tokenization.AbstractTokenizer.getTo‌​kens(AbstractTokenizer.java:58) at 
edu.knowitall.tool.tokenize.ClearTokenizer.tokenize(ClearTok‌​enizer.sc ala:22) 
我查阅了一些资料,找到了杨瑞的评论,他过去也有这个问题。但没有解决办法。我已经检查了我的openie.4.1.jar文件,并且com.googlecode.clearnlp.tokenization.EnglishTokenizer.protectEmoticon存在


希望有人能帮我解释一下。提前谢谢你。

我已经设法解决了这个错误。问题在于我从官方网站下载的OpenIE4.0JAR和OpenIE4.1JAR文件的编译。()

如何解决?自己编译这些类

  • 选择一个版本。(我选择了4.1.3)
  • 下载zip文件并解压缩该文件
  • 使用终端并重定向到文件夹目录
  • 运行“sbt包”,它将开始编译
  • 最终的JAR文件将在目标文件夹/scala-2.10/{openie assembly VERSION.JAR}中找到
  • 注意:如果您作为依赖项运行OpenIE,可能需要对代码进行一些更改。测试代码如下所示:

        OpenIE openIE = new OpenIE(new ClearParser(new ClearPostagger(new ClearTokenizer())), new ClearSrl(), false, false);
    
        Seq<Instance> extractions = openIE.extract("Obama is the president of the United States");
        Iterator<Instance> iterator = extractions.iterator();
        while (iterator.hasNext()) {
            Instance inst = iterator.next();
            StringBuilder sb = new StringBuilder();
             sb.append(inst.confidence()).append("\t\t")
             .append(inst.extr().arg1().text()).append("\t\t")
             .append(inst.extr().rel().text()).append("\t\t");
    
            Iterator<Argument> argIter = inst.extr().arg2s().iterator();
            while (argIter.hasNext()) {
                Part arg = argIter.next();
                sb.append(arg.text()).append("; ");
            }
             System.out.println(sb.toString());
        }
    
    OpenIE-OpenIE=new-OpenIE(新的ClearParser(新的ClearPostagger(新的ClearTokenizer())),new-ClearRL(),false,false);
    Seq extractions=openIE.extract(“奥巴马是美国总统”);
    迭代器迭代器=extractions.Iterator();
    while(iterator.hasNext()){
    Instance inst=iterator.next();
    StringBuilder sb=新的StringBuilder();
    附加(inst.confidence()).append(“\t\t”)
    .append(inst.extr().arg1().text()).append(“\t\t”)
    .append(inst.extr().rel().text()).append(“\t\t”);
    迭代器argIter=inst.extr().arg2s().Iterator();
    while(argIter.hasNext()){
    Part arg=argIter.next();
    sb.append(arg.text()).append(;);
    }
    System.out.println(sb.toString());
    }
    

    我希望这将对将来的人有所帮助。

    只是指出斯坦福OpenIE和OpenIE 4是不同的项目。看起来根本的问题在ClearNLP的标记器中?在将文本传递到OpenIE4之前,可以尝试预处理表情符号吗?