ImportError: невозможно импортировать имя «LEMMA_INDEX» из «spacy.lang.en» - PullRequest
1 голос
/ 09 ноября 2019

Я пытаюсь сделать лемматизатор в 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 в курсе, и я на Python 3.7.4 в среде conda. Я также загружаю en_core_web_sm, так что я не знаю, почему это неправильно.

1 Ответ

1 голос
/ 10 ноября 2019

Это связано с переходом с 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()
...