虽然“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”时,它显示“总理”作为引理之一。
我在这里缺少什么?
最佳答案
我认为通过澄清一些常见的 NLP 任务来回答你的问题。
词形还原 是在给定词的不同屈折变化的情况下找到规范词的过程。例如,run、runs、ran 和 running 是同一个词素的形式:run。如果您要对 run、runs 和 running 进行词形还原,则将运行输出。在您的例句中,请注意它是如何将意思表示为意思的。
鉴于此,听起来您想要执行的任务并不是词形还原。用一个愚蠢的反例巩固这个想法可能会有所帮助:假设引理“pm”的不同变形是什么:pming、pmed、pms?这些都不是实际的话。
听起来您的任务可能更接近 命名实体识别 (NER),您也可以在 spaCy 中完成。要遍历已解析文档中检测到的实体,您可以使用 .ents
属性,如下所示:
>>> for ent in doc.ents:
... print(ent, ent.label_)
对于您给出的句子,spacy (v. 2.0.5) 不会检测到任何实体。如果将“PM”替换为“P.M.”它将检测为一个实体,但作为 GPE。
最好的办法取决于您的任务,但如果您想要“PM”实体的所需分类,我会查看 setting entity annotations 。如果您想从大量文档中提取所有提及“PM”的内容,请使用 use the matcher in a pipeline 。
关于python - 如何从 Spacy 获得更好的引理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47633449/