2017-09-13 3 views
0

NLTKツリーを使用している単語に基づいてPOSタグを検索しようとしています。NLTKツリーのノードの内容にアクセスするにはどうすればよいですか?

ツリー内に単語(ここではdifferent)を置いて(この単語はツリーに確実に存在します)、この単語を含むノードの子のいずれかに所定のラベル(ここではNN )。

from nltk.tree import Tree 

input_string = '(ROOT (SBARQ (WHADVP (WRB How)) (SQ (VBZ is) (NP (PRP it)) (ADJP (JJ different) (PP (IN from) (NP (DT the) (JJ dishonest) (NNS businessmen))))) (. ?)))' 
for t in Tree.fromstring(input_string, read_node=lambda s: '<%s>' % s, read_leaf=lambda s: '"%s"' % s): 
    print (t) 

私はドキュメントを通過しようとしましたが、これ以上は取得できません。私がやろうとしています何

は次のとおりです。

if t.leaves() in ["different"]: 
    if content_of_t (I don't know how to access that) in ["NN"]: 
     return "yes" 

答えて

1

あなたは、ツリーのすべてのサブツリーを歩くことができます。

tree = Tree.fromstring(
      input_string, 
      read_node=lambda s: '<%s>' % s, 
      read_leaf=lambda s: '%s' % s) 

for sub_tree in tree.subtrees(): 
    if sub_tree.label() == '<JJ>' and 'different' in set(sub_tree.leaves()): 
     print('yes') 
+0

これは私には出力がありませんが、 'set(sub_tree.leaves()) 'に感謝します。これで、ノードの内容にアクセスできるようになりました。 – user110327

+1

'read_leaf = lambda s: '"%s "'%s'という単語に引用符を適用している場合は出力されません。私は引用符を削除し、 'Yes'を印刷しました –

関連する問題