单个单词的 Spacy 词形还原

Eri*_*oda 6 nlp spacy

我正在尝试获取单个单词的词形还原版本。有没有办法使用“spacy”(神奇的 python NLP 库)来做到这一点。

下面是我尝试过的代码,但这不起作用):

from spacy.lemmatizer import Lemmatizer
from spacy.lookups import Lookups
lookups = Lookups()
lemmatizer = Lemmatizer(lookups)
word = "ducks"
lemmas = lemmatizer.lookup(word)
print(lemmas)
Run Code Online (Sandbox Code Playgroud)

我希望的结果是“ducks”(复数)这个词会变成“duck”(单数)。不幸的是,“ducks”(复数)被返回。

有办法做到这一点吗?

注意:我意识到我可以处理文档(nlp(document))中的整个单词字符串,然后找到所需的标记,然后获取其引理(token.lemma_),但是我需要词形还原的单词是有点动态,无法作为大文档进行处理。

hzi*_*oun 7

如果您想对单个标记进行词形还原,请尝试简化文本处理库TextBlob

from textblob import TextBlob, Word
# Lemmatize a word
w = Word('ducks')
w.lemmatize()
Run Code Online (Sandbox Code Playgroud)

输出

> duck
Run Code Online (Sandbox Code Playgroud)

或者NLTK

> duck
Run Code Online (Sandbox Code Playgroud)

输出

> duck
Run Code Online (Sandbox Code Playgroud)

否则,您可以继续使用spaCy,但在禁用parserNER管道组件之后:

  • 首先下载一个12M的小模型(在OntoNotes上训练的英文多任务CNN)
import nltk
from nltk.stem import SnowballStemmer
stemmer = nltk.stem.SnowballStemmer('english')
stemmer.stem('ducks')
Run Code Online (Sandbox Code Playgroud)
  • Python代码
> duck
Run Code Online (Sandbox Code Playgroud)

输出

> duck
Run Code Online (Sandbox Code Playgroud)