如何在斯坦福CoreNLP中创建GrammaticalRelation

时间:2015-07-16 15:15:50

标签: nlp stanford-nlp

我最近升级到最新版本的Stanford 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));

然后我得到了理想的结果,确认解析工作正常(我也知道打印出完整的依赖关系)。

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

1 个答案:

答案 0 :(得分:0)

从版本3.5.2开始,CoreNLP中的默认依赖关系表示为Universal Dependencies。这个新表示在另一个类(UniversalEnglishGrammaticalRelations)中实现,因此GrammaticalStructure对象现在在其他地方定义。

要使用新版本,您只需将EnglishGrammaticalRelations替换为UniversalGrammaticalRelations

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

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