为什么依赖项与在线演示不同?

时间:2015-12-08 03:34:29

标签: stanford-nlp

给出以下句子:

  

我的狗也喜欢吃香肠。

online demo产生以下关系:

nmod:poss(dog-2, My-1)
nsubj(likes-4, dog-2)
advmod(likes-4, also-3)
root(ROOT-0, likes-4)
xcomp(likes-4, eating-5)
dobj(eating-5, sausage-6)

但是,我的代码也使用了通用依赖项(UD),产生了不同的东西:

nmod:poss(dog-2, My-1)
nsubj(likes-4, dog-2)
advmod(likes-4, also-3)
root(ROOT-0, likes-4)
amod(sausage-6, eating-5)
dobj(likes-4, sausage-6)
punct(likes-4, .-7)

这是我的代码:

String sentence = "My dog also likes eating sausage.";
MaxentTagger tagger = new MaxentTagger("edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger");
DependencyParser parser = DependencyParser.loadFromModelFile("edu/stanford/nlp/models/parser/nndep/english_UD.gz");

DocumentPreprocessor preprocessor = new DocumentPreprocessor(new StringReader(sentence));
for (List<HasWord> s: preprocessor) {
    List<TaggedWord> taggedWords = tagger.tagSentence(s);
    GrammaticalStructure gs = parser.predict(taggedWords);
    for (TypedDependency d: gs.typedDependencies()) {
        System.out.println(d);
    }
}

使用typedDependenciesCCprocessedtypedDependenciesCollapsedtypedDependenciesCollapsedTree会产生相同的结果。

如何获得与演示完全相同的关系?

1 个答案:

答案 0 :(得分:1)

在线演示使用选区解析器并将其转换为依赖关系。您链接的代码使用神经网络依赖解析器。预计这些会有所不同。要获得演示的输出,您应该运行Stanford Parser:http://nlp.stanford.edu/software/lex-parser.shtml。从CoreNLP,这意味着使用注释器tokenize,ssplit,parse运行。