Python 如何正确导航NLTK解析树?
NLTK又把我逼疯了 如何正确导航NLTK树(或ParentedTree)? 我想用父节点“VBZ”标识某个叶,然后我想从那里进一步向上移动到树的左侧,以标识NP节点 我该怎么做?NLTK树类似乎没有经过仔细考虑。。。或者我太笨了 谢谢你的帮助Python 如何正确导航NLTK解析树?,python,tree,nlp,nltk,Python,Tree,Nlp,Nltk,NLTK又把我逼疯了 如何正确导航NLTK树(或ParentedTree)? 我想用父节点“VBZ”标识某个叶,然后我想从那里进一步向上移动到树的左侧,以标识NP节点 我该怎么做?NLTK树类似乎没有经过仔细考虑。。。或者我太笨了 谢谢你的帮助 根据您想要做的事情,这应该是可行的。它将首先为您提供最接近的左NP节点,然后是第二个最近的节点,以此类推。因此,如果您有一个(S(NP1)(VP(NP2)(VBZ)),您的NP_树列表将有[ParentedTree(NP2),ParentedTree(N
根据您想要做的事情,这应该是可行的。它将首先为您提供最接近的左NP节点,然后是第二个最近的节点,以此类推。因此,如果您有一个
(S(NP1)(VP(NP2)(VBZ))
,您的NP_树
列表将有[ParentedTree(NP2),ParentedTree(NP1)]
from nltk.tree import *
np_trees = []
def traverse(t):
try:
t.label()
except AttributeError:
return
if t.label() == "VBZ":
current = t
while current.parent() is not None:
while current.left_sibling() is not None:
if current.left_sibling().label() == "NP":
np_trees.append(current.left_sibling())
current = current.left_sibling()
current = current.parent()
for child in t:
traverse(child)
tree = ParentedTree.fromstring("(S (NP (NNP)) (VP (VBZ) (NP (NNP))))")
traverse(tree)
print np_trees # [ParentedTree('NP', [ParentedTree('NNP', [])])]
非常感谢!我仍在理解你在那里做了什么。是否也可以查找特定的VBZ(具有特定的叶)?因为我不能投票支持你(我没有足够的声誉),我能给你买杯咖啡吗?这样做,对吗
如果t.label()==“VBZ”和t.leaves()[0]==“does”:
(假设“does”是VBZ)我必须检查t.leaves()
的返回值,但是如果您希望VBZ只有一个叶子是“does”,假设您从leaves()
得到一个数组,那么您应该执行此操作并且t.leaves()=[“does”
。这将解决叶子中只有一个单词的问题,在没有叶子的情况下,没有可能的索引越界异常。如果出于与NNP子节点相同的原因,您可能希望在t.leaves()中执行其他叶子和“does”,那么当您找到NP节点时,只需检查NP节点的子节点(ren)是否有以NNP标签为根的子树。根据是否只能有一个包含NNP的子树或多个子树和叶子,其中一个是NNP,您的搜索方式会有所不同。如果您需要我对代码进行注释以帮助您理解,请告诉我,我将编辑我的帖子