使用Stanford Coref的Anaphora分辨率

时间:2012-01-07 09:47:17

标签: nlp stanford-nlp

我有句子(文字I)

  

汤姆是个聪明的孩子。 知道很多事情。

我想在第二句中将更改为 Tom ,因此最终句子将变为(文字II)

  

汤姆是个聪明的孩子。 汤姆知道很多事情。

我已经写了一些代码,但我的 coref 对象总是 null
此外,我不知道接下来该怎么做才能得到正确的结果。

    String text = "Tom is a smart boy. He know a lot of thing.";
    Annotation document = new Annotation(text);
    Properties props = new Properties();
    props.put("annotators", "tokenize, ssplit, pos, parse, lemma, ner, dcoref");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    pipeline.annotate(document);

    List<Pair<IntTuple, IntTuple>> coref = document.get(CorefGraphAnnotation.class);

我想知道我做错了什么以及我应该做什么从文字我获得 Text II
PS:我正在使用Stanford CoreNLP 1.3.0。

感谢。

1 个答案:

答案 0 :(得分:2)

List<Pair<IntTuple, IntTuple>> coref = document.get(CorefGraphAnnotation.class);

这是一种旧的coref输出格式。

您可以将此行更改为

Map<Integer, CorefChain> graph = document.get(CorefChainAnnotation.class);

或者您可以使用oldCorefFormat选项:

props.put("oldCorefFormat", "true");