我正在尝试获取单个单词的词形还原版本。有没有办法使用“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_),但是我需要词形还原的单词是有点动态,无法作为大文档进行处理。
如果您想对单个标记进行词形还原,请尝试简化文本处理库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,但在禁用parser和NER管道组件之后:
import nltk
from nltk.stem import SnowballStemmer
stemmer = nltk.stem.SnowballStemmer('english')
stemmer.stem('ducks')
Run Code Online (Sandbox Code Playgroud)
> duck
Run Code Online (Sandbox Code Playgroud)
输出
> duck
Run Code Online (Sandbox Code Playgroud)