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

ray*_*hik 28 python spacy

我正在开发一个使用Spacy的代码库.我安装spacy使用:

sudo pip3 install spacy
Run Code Online (Sandbox Code Playgroud)

然后

sudo python3 -m spacy download en
Run Code Online (Sandbox Code Playgroud)

在最后一个命令结束时,我收到一条消息:

    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')
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试运行我的代码时,就行了:

    from spacy.en import English
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

ImportError: No module named 'spacy.en'
Run Code Online (Sandbox Code Playgroud)

我查看了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>
Run Code Online (Sandbox Code Playgroud)

然后使用:

from spacy.lang.en import English
Run Code Online (Sandbox Code Playgroud)

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

Ine*_*ani 31

是的,我可以确认您的解决方案是正确的.您从pip下载的spaCy版本是v2.0,其中包含许多新功能,但也对API进行了一些更改.其中之一是所有语言数据都已移至子模块,spacy.lang以保持事物更清洁,更有条理.因此spacy.en,您现在可以从中导入而不是使用spacy.lang.en.

顺便说一句,你在代码中尝试做的事情并不完全清楚 - 但是如果你正在加载英文模型,通常也不需要导入和初始化spacy download en.spaCy会为你做这件事.

- from spacy.en import English
+ from spacy.lang.en import English
Run Code Online (Sandbox Code Playgroud)

基本上,spacy.lang.en是一个快捷方式:

  1. 查找已命名的已安装模型en(包或快捷方式链接).
  2. 阅读它en_core_web_sm并检查它使用的语言,以及它的处理流程应该如何.
  3. 初始化语言类并向其添加管道.
  4. 从模型数据加载二进制权重,以便管道组件(如标记器,解析器或实体识别器)可以进行预测.

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

  • 我已经安装了'2.0.12'及以上版本,无法正常工作。从spacy.lang.en import English的@gdaras解决方案确实有效。 (3认同)

小智 8

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

conda install -c conda-forge spacy
Run Code Online (Sandbox Code Playgroud)

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

 python -m spacy download en
Run Code Online (Sandbox Code Playgroud)

  • 这有助于 conda + venv 设置。 (2认同)

Elh*_*ham 6

我必须使用en_core_web_sm而不是en来完成这项工作。它在抱怨权限问题。以下内容非常适用:

import spacy
spacy.load('en_core_web_sm')
from spacy.lang.en import English
Run Code Online (Sandbox Code Playgroud)