“ PM”可以表示“ pm(time)”,也可以表示“总理”.
我想抓住后者.希望“ 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
根据doc https://spacy.io/api/annotation,spacy使用WordNet进行引理.
A lemma is the uninflected form of a word. The English lemmatization data is taken from WordNet..
当我尝试在Wordnet中输入“ pm”时,它显示“总理”是引理之一.
我在这里想念什么?
解决方法:
我认为通过阐明一些常见的NLP任务将有助于回答您的问题.
词法化是在给定标准单词的不同词素变化的情况下对其进行查找的过程.例如,运行,运行,运行和运行是同一词素的形式:运行.如果要对运行,运行和运行进行定形化,则将运行输出.在您的例句中,请注意它如何使意思意味着意思.
鉴于此,听起来好像您要执行的任务不是定格化.通过一个愚蠢的反例可能有助于巩固这一想法:假设引理“ pm”的不同变化是什么:pming,pmed,pms?这些都不是实际的话.
听起来您的任务可能更接近命名实体识别(NER),您也可以在SpaCy中完成.要遍历解析的文档中检测到的实体,可以使用.ents属性,如下所示:
>>> for ent in doc.ents:
... print(ent, ent.label_)
使用您给出的句子,spacy(v.2.0.5)不会检测到任何实体.如果将“ PM”替换为“ PM”.它将检测为一个实体,但作为GPE.
最好的方法取决于您的任务,但是如果您希望对“ PM”实体进行所需的分类,那么我将看一下setting entity annotations.如果您想从大量文档集中提取“ PM”的所有内容, use the matcher in a pipeline.