代码之家  ›  专栏  ›  技术社区  ›  jamesk

在空间中识别“it”主题

  •  2
  • jamesk  · 技术社区  · 7 年前

    嗨,伙计们,我最近发现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()
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Mindful    7 年前

    这实际上不是空间问题,而是语法问题。在句子中

    你喜欢吗?

    斯帕西告诉你的主题是“你”。“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' . 如果还需要间接对象,还可以检查 'iobj' . 您可以阅读有关这些依赖项的角色的更多信息 here .