在Stanford coreNLP中使用Dependency Parser

时间:2011-11-17 15:33:47

标签: nlp stanford-nlp

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

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

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

1 个答案:

答案 0 :(得分:11)

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

有一些方便的方法可以让你做你想做的事情:

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

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

其他一些方法是:

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

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