我最近升级到最新版本的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,以匹配依赖解析器找到的内容。
答案 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中包含了所有关系名称及其类名。