我正在尝试让CoreNLP访问CorefChains。我的意图是用“他,她,...”之类的词来代替它们,但我无法访问CorefChains(它们始终为空)。
public static void main (String [] args) {
Properties props = new Properties();
props.put("annotators", "tokenize,ssplit,pos,lemma,ner,parse,dcoref");
props.put("dcoref.score", true);
StanfordCoreNLP corefPipeline = new StanfordCoreNLP(props);
String text = "Barack Obama was born in Hawaii. He is the president. Obama was elected in 2008.";
Annotation document = new Annotation(text);
corefPipeline.annotate(document);
// Chains is always null
Map<Integer, CorefChain> chains = document.get(CorefCoreAnnotations.CorefChainAnnotation.class);
}
答案 0 :(得分:0)
我认为这是一个进口舱问题。这个很好用:
import java.util.Map;
import java.util.Properties;
import edu.stanford.nlp.coref.CorefCoreAnnotations;
import edu.stanford.nlp.coref.data.CorefChain;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
public class App {
public static void main(String[] args) {
Properties props = new Properties();
props.put("annotators", "tokenize,ssplit,pos,lemma,ner,parse,dcoref");
props.put("dcoref.score", true);
StanfordCoreNLP corefPipeline = new StanfordCoreNLP(props);
String text = "Barack Obama was born in Hawaii. He is the president. Obama was elected in 2008.";
Annotation document = new Annotation(text);
corefPipeline.annotate(document);
// Chains is always null
Map<Integer, CorefChain> chains = document.get(CorefCoreAnnotations.CorefChainAnnotation.class);
System.out.println(chains);
}
}
输出:
{1=CHAIN1-["Barack Obama" in sentence 1, "He" in sentence 2, "the president" in sentence 2, "Obama" in sentence 3], 2=CHAIN2-["Hawaii" in sentence 1], 6=CHAIN6-["2008" in sentence 3]}
这是pom.xml中的内容:
<dependencies>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.9.2</version>
</dependency>
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.9.2</version>
<classifier>models</classifier>
</dependency>
</dependencies>