0

我正在使用 'stanford-corenlp-full-2013-06-20' api 生成解析树,如下所示

private String text= "Heart attack causes reduced lifespan average";
Annotation annotation = new Annotation(text);
coreNLP.annotate(annotation);
List<CoreMap> sentences = annotation.get(SentencesAnnotation.class);
for (CoreMap sentence : sentences) {
    Tree tree = sentence.get(TreeAnnotation.class);
    tree.pennPrint();
}

它显示子句“S”,如下所示

(ROOT (**S** (NP (NNP Heart) (NN attack))
             (VP (VBZ causes)
                 (**S** (NP (VBN reduced) (NN lifespan) (NN average))))))

但是当我尝试使用“stanford-parser-full-2013-06-20”提供的 GUI 解析同一个句子时,它给出了一个不同的树(看起来是正确的),如下所示

(ROOT (**S** (NP (NNP Heart) (NN attack))
             (VP (VBZ causes)
                 (VP (VBN reduced) (NP (NN lifespan) (NN average))))))

有人可以指出为什么它们都显示两个不同的输出,尽管它们都属于同一版本。

4

1 回答 1

2

斯坦福解析器将根据您要求它执行的注释任务的数量输出不同的结果(Source)。获得解析器输出所需的只是句子拆分、标记化和解析任务。但是,如果你同时运行句子拆分、标记化、词性标记和解析任务,你会得到不同的结果。

所以默认情况下,CoreNLP 注释也将添加 POS 标记,为您提供与仅解析任务不同的解析结果。

根据我使用解析树和两种形式的输出的经验,这两种方法都不是严格意义上的更好。

于 2013-07-31T18:53:10.103 回答