导入错误:无法从“spacy.lang.en”导入名称“LEMMA_INDEX”

gri*_*iom 4 python lemmatization spacy

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

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' 
Run Code Online (Sandbox Code Playgroud)

这是代码,

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)
Run Code Online (Sandbox Code Playgroud)

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

aab*_*aab 6

这是由于从 v2.1 到 v2.2 的更改以将大型查找表移出主库。lemmatizer 数据现在存储在单独的包中,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()
Run Code Online (Sandbox Code Playgroud)

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

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

import spacy
nlp = spacy.load('en_core_web_sm')
lemmatizer = nlp.Defaults.create_lemmatizer()
Run Code Online (Sandbox Code Playgroud)