2013-09-30 66 views
0

我想打印一個依賴關係圖的子樹。特別是對於句子「I turn the red meat」和起始詞meat-NN,輸出應爲:「the red meat」。如何打印部分的依賴關係圖

現在我在做這樣的:

protected String printSubGraph(IndexedWord startingWord, SemanticGraph graph) { 
    Iterable<SemanticGraphEdge> outiter = graph.outgoingEdgeIterable(startingWord); 

    // set the default bounds to the startingWord 
    int start = startingWord.beginPosition(); 
    int end = startingWord.endPosition(); 

    // search the next level for larger bounds 
    // assume that everything in between the bounds belongs to the sub-graph of the startingWord 
    for (SemanticGraphEdge edge : outiter) { 
     start = Math.min(start, edge.getGovernor().beginPosition()); 
     start = Math.min(start, edge.getDependent().beginPosition()); 
     end = Math.max(end, edge.getGovernor().endPosition()); 
     end = Math.max(end, edge.getDependent().endPosition()); 
    } 

    return graph.toRecoveredSentenceString().substring(start, end); 
} 

這是不好的原因有三:

  1. 我認爲一切都在標記之間屬於起始字的子樹。
  2. 我不搜索整個子樹的大邊界。
  3. 我假定圖形是整個文本,邊界對於RecoveredSentenceString是有效的。 (這是不對的,如果原文包含多個句子)

有沒有辦法從SemanticGraph或CoreMap中獲取這個子樹(而且只有這個子樹)而不用自己實現DFS?我知道the other way,但我不知道任何方法來查找樹中的IndexedWord。

回答

1

也許你正在尋找的不是一個依賴分析,而是一個短語結構解析。

你的一句話是:

我把紅肉。

其中的短語結構語法分析是:

(ROOT (S (NP(PRP I)) (VP(VBP轉) (NP(DT的)(JJ紅色)(NN肉))) ()))

你可以寫形式的TregexPattern:。

NP <(NN <肉)

以獲得所需的子樹或者乾脆

NP

讓所有名詞短語。