如何在Python中找到代词所指的名词

2024-05-16 04:00:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出句子的意图,就像我需要找出哪个实体代词所指的一样。在

考虑一下这个例子

My name is Rushabh. I live in Pune.

在第二句中,“我”指的是拉沙布人。如何使用python找到它。在


Tags: namein实体liveismy意图例子
3条回答

在NLP中,它被称为共参考解析。python中有一个名为neuralcoref的包。git。在

一般来说,大多数启发式应用程序在给定堆栈中使用某种焦点。堆栈是一个实体的列表,这些实体可能被引用回指(回指解析是您在这里触及的主题)。这张表包含了名词、代词和事件等抽象实体,撇开抽象回指不谈,抽象回指是其中最复杂的应用领域,检查焦点(最新的或最突出的)中的候选对象和堆栈中最近向后的其余部分的一致性(在人称和数字上的语法一致性),以便匹配最佳。别忘了更新堆栈,也就是删除未在后续引用的实体。 结果不好是很正常的,因为这仍然是一个活跃的研究领域,没有应用程序可以给你完美的回忆和精确性。如果你得到70%的正确率,你已经可以算是成功了。在

如果需要更高的精度,可以尝试找到一个关于回指解析的语料库来训练机器学习模型。今天它更受欢迎和有希望,特别是当学习像上面这样的老的启发式方法时。在

我正在研究类似的问题,它与tweets有关。person包含多个人称引用,我需要找到哪个代词代表who,这样我就可以用名词替换它,从而对情感进行相应的分类。在

import spacy
nlp = spacy.load('en')    
sent = "Modi is a great leader.He has made India proud. Rahul Gandhi is naive . He is not fit to be prime minister."
doc=nlp(sent)

sub_toks = [tok for tok in doc if ((tok.dep_ == "nsubj") )]
print(sub_toks)

nc= [x for x in doc.noun_chunks]
print(nc)


l=[]
for i,token in enumerate(doc):
    if token.pos_ in ('PROPN','PRON'):
        l.append([token.text,i,token.pos_])

这给了我一个想要的细节列表,但是我仍然需要找到一种方法来实现我的想法,因为我有超过5万条tweet,每个句子都有多个循环需要很长时间。在

相关问题 更多 >