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

如何从Spacy中获得更好的引理

  •  3
  • pauljeba  · 技术社区  · 8 年前

    “PM”可以表示“PM(时间)”,也可以表示“首相”。

    我想捕捉后者。我希望“PM”的引理返回“首相”。我如何使用 spacy ?

    返回意外引理的示例:

    >>> import spacy
    >>> #nlp = spacy.load('en')
    >>> nlp = spacy.load('en_core_web_lg')
    >>> doc = nlp(u'PM means prime minister')
    >>> for word in doc:
    ...     print(word.text, word.lemma_)
    ... 
    PM pm
    means mean
    prime prime
    minister minister
    

    根据文件 https://spacy.io/api/annotation ,spacy使用WordNet作为引理;

    引理是单词的非反射形式。英语柠檬化数据取自WordNet。。

    当我尝试在中输入“pm”时 Wordnet ,它表明“首相”是引理之一。

    我错过了什么?

    2 回复  |  直到 7 年前
        1
  •  3
  •   pmbaumgartner    7 年前

    我认为澄清一些常见的自然语言处理任务将有助于回答您的问题。

    柠檬化 是在给定单词的不同屈折变化的情况下查找规范单词的过程。例如,run、runs、ran和running是相同词素的形式:run。如果你要柠檬化 , 输出将是 . 在你的例句中,注意它是如何进行线性化的 方法 意思是 .

    考虑到这一点,听起来你想要执行的任务并不是柠檬化。用一个愚蠢的反例来巩固这个观点:假设引理“pm”的不同屈折是什么:pming,pmed,pms?这些都不是真话。

    听起来你的任务可能更接近 命名实体识别 (NER),你也可以在spaCy中这样做。要遍历已解析文档中检测到的实体,可以使用 .ents 属性,如下所示:

    >>> for ent in doc.ents:
    ...     print(ent, ent.label_)
    

    根据您给出的句子,spacy(2.0.5版)无法检测任何实体。如果将“PM”替换为“P.M.”,它将作为一个实体检测,但作为一个GPE。

    最好的做法取决于您的任务,但如果您想要对“PM”实体进行所需的分类,我会查看 setting entity annotations . 如果你想从一大堆文件中找出每一个提到“PM”的地方, use the matcher in a pipeline .

        2
  •  0
  •   Veltzer Doron    8 年前

    当我在nltk上运行首相引理时。wordnet(也使用它)我得到:

    >>>[str(lemma.name()) for lemma in wn.synset('prime_minister.n.01').lemmas()] ['Prime_Minister', 'PM', 'premier']

    它保持首字母缩略词相同,所以也许你想检查这个词。引理(),根据上下文给你一个不同的ID?