我遇到了这个错误:
我运行了 OpenIE 4.1 二进制文件,但出现以下错误:
Exception in thread "main" java.lang.NullPointerException at
com.googlecode.clearnlp.tokenization.EnglishTokenizer.protectEmoticons
(EnglishTokenizer.java:335) at
com.googlecode.clearnlp.tokenization.EnglishTokenizer.getTokenList(En
glishTokenizer.java:109) at
com.googlecode.clearnlp.tokenization.AbstractTokenizer.getTokens(AbstractTokenizer.java:58) at
edu.knowitall.tool.tokenize.ClearTokenizer.tokenize(ClearTokenizer.sc ala:22)
我查阅了一些资料,发现了Yangrui的评论,他过去也遇到过这个问题。但没有解决办法。我检查了 openie.4.1.jar 文件,并且 com.googlecode.clearnlp.tokenization.EnglishTokenizer.protectEmoticon 存在。
希望有人能帮助阐明这一点。预先感谢您。
最佳答案
我已经成功解决了这个错误。问题出在我从官网下载的OpenIE 4.0 JAR和OpenIE 4.1 JAR文件的编译上。 (http://knowitall.github.io/openie/)。
如何解决?自己编译类。
- 转到https://github.com/knowitall/openie/releases
- 选择一个版本。 (我选择4.1.3)
- 下载 zip 文件并解压缩该文件。
- 使用终端并重定向到文件夹目录。
- 运行“sbt package”,它将开始编译。
- 您的最终 JAR 文件将位于目标文件夹/scala-2.10/{openie-assemble-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());
}
我希望这对将来的人有所帮助。
关于java - 斯坦福NLP OpenIE 4错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020725/