我想打印依赖图的子树。具体针对句子“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);
}
这有三个原因:
有没有办法在没有自己实现DFS的情况下从SemanticGraph或CoreMap获取这个子树(并且只有这个子树)?我知道the other way,但我不知道在树中找到IndexedWord的任何方法。
答案 0 :(得分:1)
也许您正在寻找的不是依赖解析而是短语结构解析。
你的判决是:
我转过红肉。
短语结构解析为:
(ROOT (S (NP(PRP I)) (VP(VBP转) (NP(DT)(JJ红)(NN肉))) (。))))
您可以写一个TregexPattern表格:
NP&LT; (NN&lt; meat)
获取所需的子树或只是
NP
获取所有名词短语。