大家好,我最近发现 spaCY 是一种识别句子中语法的有趣方法,我尝试了一些简单的方法并且它有效,但是当我尝试让它识别短句中的“it”主语时,它不起作用很好,请问有什么办法可以提高准确率吗?我说的这句话是“你喜欢吗?”在这种情况下,“it”是真正的主语。当我启动程序时,spaCY 将“您”识别为主题,而不是“它”。
有什么好方法可以避免这种“错误”?这是简单的代码:
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?
正如斯佩西告诉你的那样,主题是“你”这个词。 “it”这个词是动词“like”的宾语。您可能想浏览 Wiki page for subject和 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'
的 token 。如果您还需要间接对象,还可以检查 'iobj'
。您可以阅读有关这些依赖项的作用的更多信息 here .
关于python - 识别 spaCY 中的 "it"主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301802/