ツリーT(バイナリである場合もありません)を指定すると、各ブランチの基準に一致する最下位ノードを取得する必要があります。グラフを取得する最下位ノードのフィルタ付き
したがって、label
が「NP」node.label() == 'NP'
に等しいこれらの赤色のマークされたノードのリスト(配列)を取得する必要があります。
実際にはNLTKツリー(nltk.tree.Tree.Tree)のデータ構造を使用していますが、擬似コードのみを投稿することができ、実装することができます。ここで
は、私が試したコードです:
def traverseTree(tree):
if not isinstance(tree, nltk.Tree): return []
h = []
for subtree in tree:
if type(subtree) == nltk.tree.Tree:
t = traverseTree(subtree)
if subtree.label() == 'NP' and len(t) == 0: h.append(subtree)
return h
現在の 'subtree'の上にNodeが見つかった場合は、入れ子のノードを追加したいだけなので、これが正しいかどうか分かりません。ノードを見つけたら –
を追加しないでください_above_現在サブツリー?あなたは_subtrees_だけを見ているので、現在のノードの上にノードがあるかどうかは決して確認しません。それについて考えてみましょう: 't'はブランチの一番下の 'np'であるすべてのノードを表し、' len(t)== 0なら 'subtree.label()== 'NP''ならばサブツリーはa 't'が空でない場合は、ブランチにさらに下に" np "個のノードがあり、それらが' t'に格納されていることを意味します。 –