2011-10-01 8 views
11

NLTK RegexpParserを使用して、タグ付きトークンからnoungroupsとverbgroupsを抽出しています。NLTK結果ツリーをチャンクして歩く

NPまたはVグループのチャンクだけを検索するには、結果のツリーをどのように歩くのですか?

from nltk.chunk import RegexpParser 

grammar = ''' 
NP: {<DT>?<JJ>*<NN>*} 
V: {<V.*>}''' 
chunker = RegexpParser(grammar) 
token = [] ## Some tokens from my POS tagger 
chunked = chunker.parse(tokens) 
print chunked 

#How do I walk the tree? 
#for chunk in chunked: 
# if chunk.??? == 'NP': 
#   print chunk 

(S (NPキャリア/ NN) 用/ IN 組織/ JJ 及び/ CC 細胞培養/ JJ 用/ IN(NP/DT製剤/ NN) ./ IN(NPインプラント/ NNS) および/ CC (NPインプラント/ NN) (Vを含む/ VBG) (NP/DTキャリア/ NN) /の。)

答えて

11

これは動作するはずです:

for n in chunked: 
    if isinstance(n, nltk.tree.Tree):    
     if n.label() == 'NP': 
      do_something_with_subtree(n) 
     else: 
      do_something_with_leaf(n) 
+0

は私に はAttributeErrorを与える: 'タプル' オブジェクトが属性 'ノード' N <型 'タプル'> –

+0

編集した答えは...魔法のよう –

+1

作品である持っていない - 感謝を! –

0

小さなミスtoken

from nltk.chunk import RegexpParser 
grammar = ''' 
NP: {<DT>?<JJ>*<NN>*} 
V: {<V.*>}''' 
chunker = RegexpParser(grammar) 
token = [] ## Some tokens from my POS tagger 
//chunked = chunker.parse(tokens) // token defined in the previous line but used tokens in chunker.parse(tokens) 
chunked = chunker.parse(token) // Change in this line 
print chunked 
0

にサヴィーノの答えは素晴らしいですが、それはまた、サブツリーが同様に、インデックスによってアクセスすることができることは注目に値します、例えば

for n in range(len(chunked)): 
    do_something_with_subtree(chunked[n]) 
関連する問題