在Stanford coreNLP中使用Dependency Parser

Edd*_*hik 4 nlp stanford-nlp

我正在使用Stanford coreNLP(http://nlp.stanford.edu/software/corenlp.shtml)来解析句子并提取单词之间的依赖关系.

我已经设法创建了依赖关系图,就像在提供的链接中的示例中一样,但我不知道如何使用它.我可以使用该toString()方法打印整个图形,但我getChildList遇到的问题是搜索图形中某些单词的方法,例如,需要将IndexedWord对象作为参数.现在,很清楚他们为什么这样做,因为图的节点是IndexedWord类型,但我不清楚如何创建这样的对象以搜索特定节点.

例如:我想在句子中找到代表"问题"一词的节点的子节点.我如何创建一个表示单词"problem"的IndexWord对象,以便我可以在图中搜索它?

Chr*_*ing 11

通常,您不应该创建自己的IndexedWord对象.(这些用于表示"单词标记",即文本中的特定单词,而不是"单词类型",因此要求单词"问题" - 单词类型 - 并不是真正有效;特别是一个句子可以有这个单词类型的多个标记.)

有几种方便的方法可以让你做你想做的事:

  • sg.getNodeByWordPattern(String pattern)
  • sg.getAllNodesByWordPattern(String pattern)

第一个有点危险,因为它只返回匹配模式的第一个IndexedWord,如果没有则返回null.但它最直接的是你所要求的.

其他一些方法可以从:

  • sg.getFirstRoot()用于查找图形的(通常是唯一的)根,然后从那里向下导航,例如使用sg.getChildren(root)方法.
  • sg.vertexSet()获取图中的所有IndexWord对象.
  • sg.getNodeByIndex(int)如果你已经知道输入句子,那么可以通过它们的整数索引来询问单词.

通常这些方法会让您遍历节点.真的,前两个得到... Node ...方法只是为你做迭代.