【发布时间】:2016-02-29 14:23:06
【问题描述】:
例如我得到了这棵小树(显然只是一棵子树):
(VP (VBZ says) (SBAR (-NONE- *0*) (S-3 (-NONE- *T*))))
踪迹树是通向以下形状的叶子的树:*.*。 我现在想删除所有作为跟踪树的子树。所以对于这个例子,结果应该是这样的:
(VP (VBZ says))
到目前为止,我提取了所有这些叶子:
from nltk.tree import ParentedTree
import re
traceLeaves = []
line = "( (VP (VBZ says) (SBAR (-NONE- *0*) (S-3 (-NONE- *T*)))))"
currTree = ParentedTree.fromstring(line, remove_empty_top_bracketing = True)
for leaf in currTree.leaves():
if re.search('\*', leaf):
traceLeaves.append(leaf)
但我不知道如何向上导航树,直到存在一个没有跟踪树的兄弟并从原始树中删除跟踪树。 我完全被困在这里,因为我才开始使用 nltk...
编辑:
这是一个我希望能够处理的完整句子:
( (SINV (S-3 (S (NP-SBJ-1 (-NONE- *PRO*))) (VP (VBG Assuming) (NP (DT that) (NN post)) (PP-TMP (IN at) (NP (NP (DT the) (NN age)) (PP (IN of) (NP (CD 35))))))) (, ,) (NP-SBJ-1 (PRP he)) (VP (VBD 管理) (PP-MNR (IN by) (NP (NN 共识))) (, ,) (SBAR-ADV (IN as) (S (NP-SBJ (-NONE- *PRO*)) (VP ( VBZ是)(NP-PRD(DT)(NN规则))(PP-LOC(IN in)(NP(NNS大学))))))))(,,)(VP(VBZ说)(SBAR( -NONE- *0*) (S-3 (-NONE- *T*)))) (NP-SBJ (NP (NNP Warren) (NNP H.) (NNP Strother)) (, ,) (NP (NP (DT a) (NN 大学) (NN 官方)) (SBAR (WHNP-2 (WP who)) (S (NP-SBJ-2 (-NONE- *T*)) (VP (VBZ is) (VP ( VBG 研究) (NP (NP (DT a) (NN book)) (PP (IN on) (NP (NNP Mr.) (NNP Hahn))))))))) (. .)))
【问题讨论】:
-
你使用
nltk.tree.ParentTree而不是nltk.Tree有什么原因吗? -
因为我需要检查特定树是否也有兄弟姐妹。我认为使用 ParentedTrees 会更好