首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多主语被动句中提取实体

从多主语被动句中提取实体
EN

Stack Overflow用户
提问于 2016-12-18 12:31:44
回答 1查看 1.5K关注 0票数 0

使用Python,我试图从多个主语被动语态句中提取实体。

“约翰和珍妮被大卫指控犯罪”

我的意图是从句子中抽取“约翰和珍妮”作为nsubjpass和_.ent__。

然而,我只能将“John”提取为nsubjpass。

如何把它们都提取出来?

注意,虽然在.ents中发现John是一个实体,但Jenny被认为是conj而不是nsubjpass。如何改进?

代码

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
[John]

实体清单显示:

代码

`

代码语言:javascript
复制
print(list(doc.ents)

结果

代码语言:javascript
复制
[John, Jenny, David]

现在,如果我们检查整个句子,我们看到如下:

代码:

代码语言:javascript
复制
for tok in doc:   
        print(tok, tok.dep_)

结果

代码语言:javascript
复制
John nsubjpass
and cc
Jenny conj
were auxpass
accused ROOT
of prep
crimes pobj
by agent
David pobj

注意,第二个被动主语Jenny在Spacy中被识别为conj,而不是nsubjpass。

EN

回答 1

Stack Overflow用户

发布于 2017-02-14 08:02:34

下面是一个使用POS标记和依赖分析来提取主题及其所有连接的示例。

还有一个Token.conjuncts属性,但是它只能直接连接到令牌。请参阅https://github.com/explosion/spaCy/issues/795

代码语言:javascript
复制
each_sentence3 = "John and Jenny were accused of crimes by David"
sent = nlp(each_sentence3)

result = []
subj = None
for word in sent:
    if 'subj' in word.dep_:
        subj = word
        result.append(word)
    elif word.dep_ == 'conj' and word.head == subj:
        result.append(word)
print str(result)


[John, Jenny]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41208346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档