如何从解析树创建子树的排列?

时间:2016-04-17 12:27:33

标签: java scala stanford-nlp

我试图像这样分开句子;例如:

  

我一周前在这里吃过饭,发现大多数菜肴的平均价格最高,而且太贵了,但女服务员非常好。

应该成为

  

我一周前在这里吃过饭,发现大多数菜肴的平均时间最多。”   “我一周前在这里吃过饭,发现大多数菜都太贵了。”   “我一周前在这里吃饭,女服务员真的很好。

基本上我从Stanfort Parser获得了我需要的所有信息

props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse")

但问题是我遇到了API问题。看下面的句子,我基本上需要的是某种排列算法取决于条件,例如“是通过amod关系连接的子树;如果是我们可以像<一样排列连词/ p>

  

..平均充其量且太贵......

有人可以帮我完成吗?我的所有尝试都在某种程度上结束了“好的,我现在如何得到.get(<annotation-type>.class)”或类似的东西。 Scala(首选)和/或Java可以。

enter image description here

enter image description here

我最近的尝试看起来像这样:

for(iw <- allWords) {

  println(iw.get(classOf[TextAnnotation]))
  val out = semanticGraph.getOutEdgesSorted(iw)

  for(edge <- out) {

    if(edge.getRelation.getShortName.startsWith("amod")) {

      val tree = edge.getTarget.get(classOf[TreeAnnotation])
      val lbl = new CoreLabel()
      val treeGraphNodes = new TreeGraphNode(lbl, tree.getChildrenAsList)
      val relNodes = edge.getRelation.getRelatedNodes(treeGraphNodes, treeGraphNodes, null)

      println("")
    }
  }
}

这里我试图从amod关系中获取所有受影响的节点,如上图所示。它应该返回相关的节点,但由于tree总是null,所以我不敢这样做。

0 个答案:

没有答案