我正在使用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)。
这有什么解决方法?这是一个错误还是我做错了什么?
答案 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以各种方式运行此示例我没有看到您遇到的问题。