一尘不染

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

python

我正在使用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

如果还有其他答案,我仍会保持开放状态。


阅读 182

收藏
2020-12-20

共1个答案

一尘不染

是的,我可以确认您的解决方案是正确的。您从pip下载的spaCy的版本为v2.0,其中包括许多新功能,但对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),它的处理管道应该是什么样子(在这种情况下,taggerparserner)。
  3. 初始化语言类并向其中添加管道。
  4. 从模型数据中加载二进制权重,以便管道组件(例如标记器,解析器或实体识别器)可以进行预测。

有关更多详细信息,请参阅文档中的此部分

2020-12-20