ImportError: cannot import name 'LEMMA_INDEX' from 'spacy.lang.en'

ImportError: cannot import name 'LEMMA_INDEX' from 'spacy.lang.en'

我正在尝试在 spaCy 中制作词形还原器,但是当我 运行 我拥有的代码时,这个错误不断弹出。

Traceback (most recent call last):
  File "word_pract.py", line 46, in <module>
    from spacy.lang.en import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES
ImportError: cannot import name 'LEMMA_INDEX' from 'spacy.lang.en' 

这是代码,

import spacy
from spacy.lemmatizer import Lemmatizer
from spacy.lang.en import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES

nlp = spacy.load("en_core_web_sm")

lemmatizer = Lemmatizer(LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES)
lemmas = lemmatizer(u'ducks', u'NOUN')
print(lemmas)

我的 spaCy 是最新的,并且在 conda 环境中使用 python 3.7.4。我也下载了en_core_web_sm,不知道为什么会出错

这是由于从 v2.1 到 v2.2 的更改,将大型查找表移出了主库。词形还原器数据现在存储在单独的包 spacy-lookups-data 中,并且 Lemmatizer 使用 Lookups 对象而不是单个变量进行初始化。请参阅此处关于初始化词形还原器的第二部分:https://spacy.io/usage/v2-2#migrating

如果安装软件包 spacy-lookups-data,您可以像这样访问默认的英语词形还原器:

from spacy.lang.en import English
lemmatizer = English.Defaults.create_lemmatizer()

如果可用,它会自动从 spacy-lookups-data 加载数据。如果它不可用,引理将与文本中的标记相同。

如果您使用像 en_core_web_sm 这样的英文模型,查找表包含在模型中,因此您不需要额外的包 spacy-lookups-data:

import spacy
nlp = spacy.load('en_core_web_sm')
lemmatizer = nlp.Defaults.create_lemmatizer()