基本和增强的依赖关系在 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 以各种方式使用此示例我没有看到您遇到的问题。
我正在为我的一个项目使用 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 以各种方式使用此示例我没有看到您遇到的问题。