ImportError:没有名为'spacy.en'的模块

时间:2017-11-14 21:15:09

标签: python spacy

我正在使用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,最接近的是:Import error with spacy: "No module named 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

如果有任何其他答案,我仍然保持开放状态。

12 个答案:

答案 0 :(得分:27)

是的,我可以确认您的解决方案是正确的。您从pip下载的spaCy版本是v2.0,其中包含许多新功能,还包括a few changes to the API。其中之一是所有语言数据都已移至子模块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,{{1} }和parser)。
  3. 初始化语言类并向其添加管道。
  4. 从模型数据加载二进制权重,以便管道组件(如标记器,解析器或实体识别器)可以进行预测。
  5. 有关详细信息,请参阅this section in the docs

答案 1 :(得分:8)

我使用以下命令从anaconda发行版安装spacy。

conda install -c conda-forge spacy

之后,我可以使用以下命令下载英语,没有任何错误。

 python -m spacy download en

答案 2 :(得分:4)

我必须使用 en_core_web_sm 而不是 en 来完成这项工作。它抱怨许可问题。以下工作完美:

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

答案 3 :(得分:4)

我认为所提供的答案存在混淆。 纠正提到的事情:

  • 您应该从spacy.lang.en
  • 导入
  • spacy.load('en')确实是加载模型的捷径。

<强>可是: 文件en_core_web_sm与从spacy.lang.en导入的文件不同。实际上,第一个文件是在数据集中使用spacy train训练后的第二个文件,然后打包结果。 spacy.lang.en包含模型定义:lemmas lookup table,stop_words,lexical attributes(以及更多)。但那只是那个。它没有使用数据集进行训练,因此依赖关系图和其他功能可以起作用。

我认为在使用spaCy时这应该足够清楚了。

答案 4 :(得分:1)

en_core_web_sm文件夹已下载到spacy文件夹之外。我将其复制到spacy / data文件夹中,并可以运行spacy

中记录的代码

答案 5 :(得分:1)

Anaconda用户

  1. 如果您使用的是conda虚拟环境,请 确保其Python版本与基本环境中的Python版本相同 。要验证这一点,请在每个环境中运行python --version。如果不相同,请使用该版本的Python(例如conda create --name myenv python=x.x.x)创建一个新的虚拟环境。

  2. 激活虚拟环境(conda activate myenv

  3. conda install -c conda-forge spacy
  4. python -m spacy download en_core_web_sm

我刚遇到这个问题,以上内容对我有用。这解决了在当前虚拟环境无法访问的区域中发生下载的问题。

然后您应该能够运行以下内容:

import spacy
nlp = spacy.load("en_core_web_sm")

答案 6 :(得分:1)

pip install spacy
python -m spacy download en

这对我有用

答案 7 :(得分:0)

在Windows 10和Anaconda安装上遇到此问题的任何人,请在运行脚本之前在命令行上使用where python查找conda python可执行文件。

就我而言,PATH上的python是

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

而我需要的是

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

只需在路径上添加正确的python,或转到此位置并运行

python -m spacy download en

它应该可以工作。

答案 8 :(得分:0)

根据官方网站,您应该执行以下操作:

python -m spacy download en

但是,这令人惊讶地不适用于我。
您可能会感兴趣,我的环境基于OSX 10.15和python 3.8,pip 19.3.1
尝试:

spacy download en

答案 9 :(得分:0)

从spacy.lang.en导入英语 代替 从spacy.en导入英语

答案 10 :(得分:0)

对我来说,这些步骤有效:

this::parseResendOtpResponse

我在spyder控制台(通过anaconda安装)上运行这些步骤

答案 11 :(得分:0)

我对 en 和 fr 的解决方案

!pip install spacy
!python -m spacy download en
!python -m spacy download it
!python -m spacy download fr

然后

import spacy
spacy.load('en')
spacy.load('it')
spacy.load('fr')