2016-09-05 2 views
0

나는 Spacy를 사용하여 문장에서 대상을 찾고 싶어요. 아래의 코드는 잘 작동하고 종속성 트리을주고있다.파이썬에서 NLTK를 사용하여 Spacy Dependency 트리에서 주제를 찾을 수 있습니까?

이 종속성 트리 코드에서
import spacy 
from nltk import Tree 

en_nlp = spacy.load('en') 

doc = en_nlp("The quick brown fox jumps over the lazy dog.") 

def to_nltk_tree(node): 
    if node.n_lefts + node.n_rights > 0: 
     return Tree(node.orth_, [to_nltk_tree(child) for child in node.children]) 
    else: 
     return node.orth_ 


[to_nltk_tree(sent.root).pretty_print() for sent in doc.sents] 

enter image description here

, 나는이 문장의 주제를 찾을 수 있습니까?

+0

[this] (http://stackoverflow.com/a/19753199/419338) 도움이 되셨습니까? 당신이 제안 링크 @mbatchkarov – mbatchkarov

+0

스탠포드 Corenlp''에있다. 그러나 나는'NLTK'에서 원한다. 낮은 평판을 기록했다.와 멋진 대답 – user6750923

답변

5

나는 당신이 NLTK 구문 분석 트리 (How to identify the subject of a sentence? 참조)를 사용하여 코드를 작성할지 여부를 모르겠어요. 그러나 spacy는 word.dep_ 속성의 'nsubj'레이블을 사용하여이를 생성합니다.

import spacy 
from nltk import Tree 

en_nlp = spacy.load('en') 

doc = en_nlp("The quick brown fox jumps over the lazy dog.") 

sentence = next(doc.sents) 
for word in sentence: 
...  print "%s:%s" % (word,word.dep_) 
... 
The:det 
quick:amod 
brown:amod 
fox:nsubj 
jumps:ROOT 
over:prep 
the:det 
lazy:amod 
dog:pobj 

두 개 이상의 복잡한 상황이있을 수 있음을 상기시켜줍니다.

>>> doc2 = en_nlp(u'When we study hard, we usually do well.') 
>>> sentence2 = next(doc2.sents) 
>>> for word in sentence2: 
...  print "%s:%s" %(word,word.dep_) 
... 
When:advmod 
we:nsubj 
study:advcl 
hard:advmod 
,:punct 
we:nsubj 
usually:advmod 
do:ROOT 
well:advmod 
.:punct 
+0

+1 (신규 회원. :)) + 받아 들였다. 나는 지금 나무로 놀 수있다. – user6750923

관련 문제