基本和增强的依赖关系在 Stanford coreNLP 中给出不同的结果

Basic and enhanced dependencies give different results in Stanford coreNLP

我正在为我的一个项目使用 coreNLP 的依赖解析。基本依赖和增强依赖是特定依赖的不同结果。 我使用以下代码来获得增强的依赖关系。

val lp = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
lp.setOptionFlags("-maxLength", "80")
val rawWords = edu.stanford.nlp.ling.Sentence.toCoreLabelList(tokens_arr:_*)
val parse = lp.apply(rawWords)
val tlp = new PennTreebankLanguagePack()
val gsf:GrammaticalStructureFactory = tlp.grammaticalStructureFactory()
val gs:GrammaticalStructure = gsf.newGrammaticalStructure(parse)
val tdl = gs.typedDependenciesCCprocessed()

对于下面的例子,

Account name of ramkumar.

我使用简单的 API 来获取基本的依赖项。我之间的依赖 (帐户,姓名)是(化合物)。但是当我使用上面的代码来增强依赖性时,我得到了 (account,name) 和 (dobj) 之间的关系。

解决这个问题的方法是什么?这是一个错误还是我做错了什么?

当我运行这个命令时:

java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse -file example.txt -outputFormat json

根据您在文件 example.txt 中的示例文本,我认为 compound 是这两个词之间对于两种依赖类型的关系。

我也用 simple API 试过了,得到了同样的结果。

您可以看到 simple 使用此代码生成的内容:

package edu.stanford.nlp.examples;

import edu.stanford.nlp.semgraph.SemanticGraphFactory;
import edu.stanford.nlp.simple.*;

import java.util.*;

public class SimpleDepParserExample {

  public static void main(String[] args) {
    Sentence sent = new Sentence("...example text...");
    Properties props = new Properties();
    // use sent.dependencyGraph() or sent.dependencyGraph(props, SemanticGraphFactory.Mode.ENHANCED) to see enhanced dependencies
    System.out.println(sent.dependencyGraph(props, SemanticGraphFactory.Mode.BASIC));
  }

}

我对 Stanford CoreNLP 的任何 Scala 接口一无所知。我还应该注意,我的结果使用的是 GitHub 的最新代码,但我认为 Stanford CoreNLP 3.8.0 也会产生类似的结果。如果您使用的是旧版本的 Stanford CoreNLP,这可能是错误的潜在原因。

但是 运行使用 Java 以各种方式使用此示例我没有看到您遇到的问题。