ImportError: нет модуля с именем 'spacy.en'

Я работаю над кодовой базой, использующей Spacy. Я установил spacy, используя:

sudo pip3 install spacy

а потом

sudo python3 -m spacy download en

В конце этой последней команды я получил сообщение:

    Linking successful
/home/rayabhik/.local/lib/python3.5/site-packages/en_core_web_sm -->
/home/rayabhik/.local/lib/python3.5/site-packages/spacy/data/en

You can now load the model via spacy.load('en')

Теперь, когда я пытаюсь запустить свой код, на линии:

    from spacy.en import English

это дает мне следующую ошибку:

ImportError: No module named 'spacy.en'

Я посмотрел на Stackexchange, а ближайший: импортная ошибка с spacy: "Нет модуля с именем en", который не решает мою проблему.

Любая помощь будет оценена по достоинству. Благодарю.

Изменение: Возможно, я решил это, выполнив следующие действия:

 Python 3.5.2 (default, Sep 14 2017, 22:51:06) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import spacy
>>> spacy.load('en')
<spacy.lang.en.English object at 0x7ff414e1e0b8>

и затем используя:

from spacy.lang.en import English

Я все еще держу это открытым, если есть другие ответы.

Ответ 1

Да, я могу подтвердить, что ваше решение верное. Версия spaCy, которую вы скачали с pip, - v2.0, которая включает в себя множество новых функций, а также некоторые изменения в API. Одним из них является то, что все языковые данные были перемещены в подмодуль spacy.lang чтобы обеспечить spacy.lang и лучшую организацию. Поэтому вместо использования spacy.en вы теперь импортируете из spacy.lang.en.

- from spacy.en import English
+ from spacy.lang.en import English

Однако также стоит упомянуть, что то, что вы загружаете при запуске spacy download en отличается от spacy.lang.en. Языковые данные, поставляемые с spaCy, включают в себя статические данные, такие как правила токенизации, стоп-слова или таблицы лемматизации. Пакет en, который вы можете загрузить, является ярлыком для статистической модели en_core_web_sm. Он включает в себя языковые данные, а также двоичный вес, позволяющий spaCy делать прогнозы для тегов части речи, зависимостей и именованных объектов.

Вместо того, чтобы просто загружать en, я бы порекомендовал использовать полное название модели, что делает более очевидным, что происходит:

python -m spacy download en_core_web_sm
nlp = spacy.load("en_core_web_sm")

Когда вы вызываете spacy.load, spaCy делает следующее:

  1. Найдите установленную модель с именем "en_core_web_sm" (ссылка на пакет или ярлык).
  2. Прочитайте его meta.json и проверьте, какой язык он использует (в данном случае spacy.lang.en) и как должен выглядеть его конвейер обработки (в данном случае tagger, parser и ner).
  3. Инициализируйте языковой класс и добавьте в него конвейер.
  4. Загрузите двоичные веса из данных модели, чтобы компоненты конвейера (такие как тегер, анализатор или распознаватель объектов) могли делать прогнозы.

Смотрите этот раздел в документации для более подробной информации.

Ответ 2

Я использовал следующую команду для установки spacy из дистрибутива anaconda.

conda install -c conda-forge spacy

и после этого я смог загрузить английский, используя следующую команду без каких-либо ошибок.

 python -m spacy download en

Ответ 3

Я должен был использовать en_core_web_sm вместо en, чтобы сделать эту работу. Он жалуется на проблему с разрешением. Следующее работает отлично:

import spacy
spacy.load('en_core_web_sm')
from spacy.lang.en import English

Ответ 4

Я думаю, что в ответах есть путаница. Правильные упоминания:

  • вам следует импортировать из spacy.lang.en
  • spacy.load('en') действительно является ярлыком для загрузки моделей.

Но: файл en_core_web_sm - это не тот файл, который вы импортируете из spacy.lang.en. Фактически, первый файл создается со второго после тренировки со штангой в наборе данных и затем упаковывает результат. spacy.lang.en содержит определение модели: таблица поиска лемм, стоп-слова, лексические атрибуты (и многое другое). Но это и только это. Он не обучен набору данных, чтобы график зависимости и другие функции могли работать.

Я думаю, что это должно быть достаточно ясно при работе с spaCy.

Ответ 5

папка en_core_web_sm была загружена вне папки spacy. Я скопировал его в папку spacy/data и смог запустить код, как описано в spacy

Ответ 6

Любой, кто сталкивается с этой проблемой при установке Windows 10 и Anaconda, прежде чем запускать сценарий, ищет исполняемый файл conda python с использованием команды where python в командной строке.

В моем случае питон на PATH был

C:\Users\XXX\.windows-build-tools\python27\python.exe

тогда как мне нужно было от

c:\Users\XXX\AppData\Local\Continuum\anaconda3\python.exe

Просто добавьте правильный питон на пути, или перейдите в это место и запустите

python -m spacy download en

и это должно работать.