0

我正在为我的一个项目使用 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 来获取基本依赖项。我在(帐户,名称)之间得到的依赖是(复合)。但是当我使用上面的代码来获得增强的依赖关系时,我得到(帐户,名称)之间的关系为(dobj)。

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

4

1 回答 1

1

当我运行这个命令时:

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));
  }

}

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

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

于 2017-08-31T00:58:42.727 回答