2016-09-05 7 views
0

件の件名Spacyという文章で検索します。以下のコードは正常に動作しており、の依存関係ツリーを与えています。この依存関係ツリーコードからPythonで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

+0

@mbatchkarovあなたが提案したリンクは 'Stanford 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

関連する問題