首页 > 解决方案 > ImportError:无法从“spacy.lang.en”导入名称“LEMMA_INDEX”

问题描述

我正在尝试在 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,所以我不知道为什么它错了。

标签: pythonspacylemmatization

解决方案


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

如果你安装了 package 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()

推荐阅读