【问题标题】:'How to find out noun to which pronoun is referring to' in python'如何找出代词所指的名词'在python中
【发布时间】:2019-09-25 02:20:26
【问题描述】:

我想找出句子的意图,我需要找出所指的实体代词。

考虑这个例子

我的名字是鲁沙布。我住在浦那。

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

【问题讨论】:

    标签: python nlp nltk spacy


    【解决方案1】:

    我正在研究类似的问题,它与推文有关。该人包含多个人称引用,我需要找到哪个代词是为谁而存在的,以便我可以将其替换为名词,从而对情绪进行相应的分类。

    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_])
    

    这给了我一个所需细节的列表,但我仍然需要找到一种方法来以更少的计算方式实现我的想法,因为我有超过 50K 的推文,而且每个句子的多个循环需要很长时间。

    【讨论】:

      【解决方案2】:

      通常,大多数启发式应用程序在给定堆栈中使用某种焦点。堆栈是可能被照应引用的实体列表(照应解析是您在此处触及其表面的主题)。这个列表包含名词、代词和抽象实体,如事件等。撇开抽象照应,这是所有这些应用领域中最复杂的,你检查焦点候选人的一致性(人称和数字的语法一致性)(最最近或在堆栈中突出)和堆栈的其余部分从最近的倒数开始,以匹配最佳。不要忘记更新堆栈,即删除随后未引用的实体。 得到不好的结果是很正常的,因为这仍然是一个活跃的研究领域,没有任何应用程序可以为您提供完美的召回率和准确率。如果你得到 70% 的正确率,你就已经算成功了。

      如果您需要更高的精度,请尝试查找有关照应分辨率的语料库来训练机器学习模型。无论如何,今天它更受欢迎和有前途,尤其是在学习上述启发式方法时。

      【讨论】:

        【解决方案3】:

        在 NLP 中,它被称为共同引用解析。 python中有一个名为neuralcoref的包。 git.

        【讨论】:

        • @Rushabh 你觉得我理解你的问题吗?
        • 是的。但是您提供的解决方案没有那么准确。我正在寻找参考分辨率,但它是共同参考分辨率。@Chandan Gupta
        • 它不适用于(我发烧了。他们的补救措施吗?)......有没有更好的解决方案? @Chandan Gupta。
        • 是的,我知道,但这是一项艰巨的任务。对于共同参考解决方案,有更好的选择 this.
        【解决方案4】:

        这是一个相当模糊的问题,但您可以在自然语言处理中搜索 POS(词性)标记。 Here 就是一个例子。

        【讨论】:

        • 谢谢。但它只适用于一个句子。如果引用的实体出现在其他语句中怎么办。
        猜你喜欢
        • 1970-01-01
        • 2021-08-07
        • 2017-11-26
        • 1970-01-01
        • 1970-01-01
        • 2015-05-20
        • 2014-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多