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 делает следующее:
- Найдите установленную модель с именем
"en_core_web_sm"
(ссылка на пакет или ярлык). - Прочитайте его
meta.json
и проверьте, какой язык он использует (в данном случае spacy.lang.en
) и как должен выглядеть его конвейер обработки (в данном случае tagger
, parser
и ner
). - Инициализируйте языковой класс и добавьте в него конвейер.
- Загрузите двоичные веса из данных модели, чтобы компоненты конвейера (такие как тегер, анализатор или распознаватель объектов) могли делать прогнозы.
Смотрите этот раздел в документации для более подробной информации.
Ответ 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
и это должно работать.