2017-09-13 11 views
0

NLTK 트리를 사용하는 단어를 기반으로 POS 태그를 검색하려고합니다.NLTK 트리에서 노드 내용에 어떻게 액세스합니까?

트리에서 단어 (여기서는 : 다른 단어)를 찾고 (이 단어가 트리에 확실히 있음) 노드에서이 단어가 들어있는 노드의 하위에 지정된 레이블이 있는지 확인하고 싶습니다 (여기서는 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' 단어에 여전히 따옴표를 적용하면 아무 출력도 표시되지 않습니다. 따옴표를 지우고'예'라고 출력했습니다. –