4

I want to find the subject from a sentence using Spacy. The code below is working fine and giving a dependency tree.

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

From this dependency tree code, Can I find the subject of this sentence?

4

3 回答 3

23

我不确定您是否想使用 nltk 解析树编写代码(请参阅如何识别句子的主语?)。但是,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
于 2016-09-05T16:33:44.070 回答
0

尝试这个:

import spacy
import en_core_web_sm
nlp = spacy.load('en_core_web_sm')
sent = "I need to be able to log into the Equitable siteI tried my username and password from the AXA Equitable site which worked fine yesterday but it won't allow me to log in and when I try to change my password it says my answer is incorrect for the secret question I just need to be able to log into the Equitable site"
nlp_doc=nlp(sent)
subject = [tok for tok in nlp_doc if (tok.dep_ == "nsubj") ]
print(subject)
于 2020-07-29T11:38:43.850 回答
0

与 Leavesof3 一样,我更喜欢将 spaCy 用于这种目的。它有更好的可视化,即

在此处输入图像描述

主题将是具有依赖属性“nsubj”或“普通主题”的单词或短语(如果您使用名词分块)

您可以在此处访问 displaCy(spaCy 可视化)演示

于 2020-06-12T00:11:09.120 回答