在 spaCY 中识别 "it" 个主题

recognize "it" subject in spaCY

大家好,我最近发现 spaCY 是一种识别句子中语法的有趣方法,我尝试了一些简单的方法并且它有效,但是当我尝试让它识别短句中的 "it" 主语时,它效果不是很好,有没有办法提高准确性?我说的句子是 "do you like it?",在这种情况下 "it" 是真正的主题。当我启动程序时,spaCY 将 "you" 识别为主题,而不是 "it"。

避免这种情况的好方法是什么"errors"?这是简单的代码:

import spacy

sentence = input('insert sentence: \n\n')
nlp = spacy.load('en')
sent = sentence
doc=nlp(sent)

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

print(sub_toks) 
print()

这其实不是Spacy问题而是语法问题。在句子

Do you like it?

主题 - 正如 Spacy 告诉您的那样 - 是单词 "you"。单词 "it" 是动词 "like" 的 宾语 。您可能需要浏览 Wiki page for subject and the Wiki page for object.

如果您要查找主语为 "it" 的句子,Spacy 可以帮助您。

sent = nlp("it is very good")
for token in sent:
    print(token, token.dep_)

>> it nsubj
>> is ROOT
>> very advmod
>> good acomp

在这种情况下,Spacy 正确报告 "it" 是名义主语,token.dep 等于 'nsubj'。相反,如果你真正想要的是直接宾语,那么你可以从这个输出中看到:

sent = nlp("do you like it")
for token in sent:
    print(token, token.dep_)

>> do aux
>> you nsubj
>> like ROOT
>> it dobj

您应该在 token.dep_ == 'dobj' 处寻找令牌。如果您还需要间接对象,您还可以检查 'iobj'。您可以阅读更多关于这些依赖项的作用 here.