我正在开发一个使用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
如果有任何其他答案,我仍然保持开放.
解决方法:
是的,我可以确认您的解决方案是正确的.您从pip下载的spaCy版本是v2.0,其中包含许多新功能,但也包括a few changes to the API.其中之一是所有语言数据都已移至子模块spacy.lang,以保持更清洁,更有条理.因此,您现在可以从spacy.lang.en导入而不是使用spacy.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).
>初始化语言类并向其添加管道.
>从模型数据加载二进制权重,以便管道组件(如标记器,解析器或实体识别器)可以进行预测.
有关详细信息,请参见this section in the docs.