【发布时间】:2016-12-18 12:31:44
【问题描述】:
使用 Python Spacy,我正在尝试从多个主题被动语态句子中提取实体。
句子 = “约翰和珍妮被大卫指控犯罪”
我的意图是从句子中提取“John and Jenny”作为nsubjpass和.ent_。
但是,我只能将“John”提取为 nsubjpass。
如何提取它们?
请注意,虽然在 .ents 中发现 John 作为实体,但 Jenny 被视为 conj 而不是 nsubjpass。 如何改进?
代码
each_sentence3 = "John and Jenny were accused of crimes by David"
doc=nlp(each_sentence3)
passive_toks=[tok for tok in doc if (tok.dep_ == "nsubjpass") ]
if passive_toks != []:
print(passive_toks)
结果:
[John]
实体列表显示:
代码
`
print(list(doc.ents)
结果
[John, Jenny, David]
现在如果我们检查整个句子,我们会看到如下:
代码:
for tok in doc:
print(tok, tok.dep_)
结果
John nsubjpass
and cc
Jenny conj
were auxpass
accused ROOT
of prep
crimes pobj
by agent
David pobj
注意第二个被动主语 Jenny 在 Spacy 中被识别为 conj 而不是 nsubjpass。
【问题讨论】:
-
这不是依赖解析器语法处理连接主题的标准方式吗?我看到从语言的角度来看,您希望两个成员平等地成为主题的一部分,但我认为您不会从解析器中得到这一点(除非您使用选区)。