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

时间:2017-08-29 06:41:34

标签: parsing nlp stanford-nlp dependency-parsing

我正在使用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)。

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

1 个答案:

答案 0 :(得分: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));
  }

}

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

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