2011-11-17 96 views
4

我使用Stanford coreNLP(http://nlp.stanford.edu/software/corenlp.shtml)来解析句子并提取单词之间的依赖关系。使用斯坦福核心中的依赖分析器NLP

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

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

回答

10

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

有一对夫妇的方便的方法,让你做你想做的。

  • sg.getNodeByWordPattern(字符串模式)
  • sg.getAllNodesByWordPattern (String pattern)

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

一些其他方法来从开始有:

  • sg.getFirstRoot()来查找(第一,通常只)的曲线图的根,然后向下从那里导航,诸如通过使用SG .getChildren(root)方法。
  • sg.vertexSet()获取图中的所有IndexWord对象。
  • sg.getNodeByIndex(int)如果您已经知道输入句子,并且可以通过它们的整数索引来请求单词。

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