这是我第一次发帖;所以,如果我表现出任何不良做法,请告诉我们。
所以目前我正在尝试使用斯坦福大学的OpenIE从网络挖掘数据中提取信息。由于我是Java新手,我只是从他们的页面复制了示例代码段:http://nlp.stanford.edu/software/openie.shtml
看起来像这样:
import java.util.*;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.naturalli.NaturalLogicAnnotations;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.ie.util.RelationTriple;
import edu.stanford.nlp.util.CoreMap;
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,depparse,natlog,openie");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Annotation doc = new Annotation("Obama was born in Hawaii. He is our president.");
pipeline.annotate(doc);
for (CoreMap sentence : doc.get(CoreAnnotations.SentencesAnnotation.class)) {
Collection<RelationTriple> triples = sentence.get(NaturalLogicAnnotations.RelationTriplesAnnotation.class);
for (RelationTriple triple : triples) {
System.out.println(triple.confidence + "\t" +
triple.subjectLemmaGloss() + "\t" +
triple.relationLemmaGloss() + "\t" +
triple.objectLemmaGloss());
}
}
}
然后我将它编译成一个类并将其放入他们网站的openIE jar中。
我运行了这样一个命令,它与命令行调用示例几乎相同:
java -mx1g -cp stanford-openie.jar:stanford-openie-models.jar Example
但最后我得到了这样一个错误:
Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... Exception in thread "main" edu.stanford.nlp.io.RuntimeIOException: java.io.IOException: Unable to resolve "edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz" as either class path, filename or URL
虽然他们的命令行调用会在页面上显示,但我认为这是我的Java技能问题。但是我无法弄清楚如何解决这个问题,Stackoverflow上提出的相关问题也没有帮助。为什么不能解析类路径?
注意:我看到有人在同一时间发布了关于在他们的工作区中使用CoreNLP的内容,但我确信我不会将这些JAR放在同一目录下。
答案 0 :(得分:2)
将setProperty行更改为以下内容。我面临同样的问题。这一行的改变使其有效。
此外,您应该在路径中包含CoreNLP和Openie jar,以帮助它正常工作。
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,depparse,natlog,openie");