如何在Stanford CoreNLP中创建语法关系

如何在Stanford CoreNLP中创建语法关系,nlp,stanford-nlp,Nlp,Stanford Nlp,我最近升级到了斯坦福CoreNLP的最新版本。我以前用来获取句子中主语或宾语的代码是 System.out.println("subject: "+dependencies.getChildWithReln(dependencies.getFirstRoot(), EnglishGrammaticalRelations.NOMINAL_SUBJECT)); 但是现在它返回null 我试着与你建立关系 GrammaticalRelation subjreln =

我最近升级到了斯坦福CoreNLP的最新版本。我以前用来获取句子中主语或宾语的代码是

System.out.println("subject: "+dependencies.getChildWithReln(dependencies.getFirstRoot(), EnglishGrammaticalRelations.NOMINAL_SUBJECT));
但是现在它返回
null

我试着与你建立关系

GrammaticalRelation subjreln =
                edu.stanford.nlp.trees.GrammaticalRelation.valueOf("nsubj");
没有成功。如果我使用如下代码提取一个关系

GrammaticalRelation target = (dependencies.childRelns(dependencies.getFirstRoot())).iterator().next();
然后运行相同的请求

System.out.println("target: "+dependencies.getChildWithReln(dependencies.getFirstRoot(), target));
然后我得到了期望的结果,确认解析工作正常(我也从打印出完整的依赖项中知道这一点)


我怀疑我的问题与切换到通用依赖项有关,但我不知道如何从头开始创建语法关系,以匹配依赖项解析器发现的内容。

因为3.5.2版,CoreNLP中的默认依赖项表示是。这个新的表示在不同的类(
UniversalEnglishGrammaticRelations
)中实现,因此
语法结构
对象现在在其他地方定义

使用新版本只需将
英语语法关系
替换为
通用语法关系

System.out.println("subject: "+dependencies.getChildWithReln(dependencies.getFirstRoot(), UniversalEnglishGrammaticalRelations.NOMINAL_SUBJECT));

但是,请注意,新表示中的某些关系不同,可能不再存在(
nsubj
仍然存在)。我们目前正在从旧的表示编译为新的通用依赖关系。它仍然不完整,但它已经包含CoreNLP中的所有关系名称及其类名。

自版本3.5.2以来,CoreNLP中的默认依赖关系表示为。这个新的表示在不同的类(
UniversalEnglishGrammaticRelations
)中实现,因此
语法结构
对象现在在其他地方定义

使用新版本只需将
英语语法关系
替换为
通用语法关系

System.out.println("subject: "+dependencies.getChildWithReln(dependencies.getFirstRoot(), UniversalEnglishGrammaticalRelations.NOMINAL_SUBJECT));

但是,请注意,新表示中的某些关系不同,可能不再存在(
nsubj
仍然存在)。我们目前正在从旧的表示编译为新的通用依赖关系。它仍然不完整,但在CoreNLP中已经包含了所有关系名及其类名。

谢谢。部分混淆源于这样一个事实,即关系看起来是相同的(同名/简称),但
equals
方法实际上也检查语言字段是否相同。这已经从英语变成了通用英语。谢谢。部分混淆源于这样一个事实,即关系看起来是相同的(同名/简称),但
equals
方法实际上也检查语言字段是否相同。这已经从英语变成了通用英语。