Spacy在Windows 10和Python 3.5.3 :: Anaconda custom (64-bit)上找不到'en_core_web_sm'模型。

137
什么是spacy.load('en_core_web_sm')spacy.load('en')之间的区别? 这个链接解释了不同的模型大小。但我仍然不清楚spacy.load('en_core_web_sm')spacy.load('en')有什么区别。 spacy.load('en')对我来说运行良好。但spacy.load('en_core_web_sm')会抛出错误。
我已经按照以下方式安装了spacy。当我进入jupyter笔记本并运行命令nlp=spacy.load('en_core_web_sm')时,我收到以下错误消息。
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-4-b472bef03043> in <module>()
      1 # Import spaCy and load the language library
      2 import spacy
----> 3 nlp = spacy.load('en_core_web_sm')
      4 
      5 # Create a Doc object

C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder\lib\site-packages\spacy\__init__.py in load(name, **overrides)
     13     if depr_path not in (True, False, None):
     14         deprecation_warning(Warnings.W001.format(path=depr_path))
---> 15     return util.load_model(name, **overrides)
     16 
     17 

C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder\lib\site-packages\spacy\util.py in load_model(name, **overrides)
    117     elif hasattr(name, 'exists'):  # Path or Path-like to model data
    118         return load_model_from_path(name, **overrides)
--> 119     raise IOError(Errors.E050.format(name=name))
    120 
    121 

OSError: [E050] Can't find model 'en_core_web_sm'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.

我如何安装Spacy ---

(C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder) C:\Users\nikhizzz>conda install -c conda-forge spacy
Fetching package metadata .............
Solving package specifications: .

Package plan for installation in environment C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder:

The following NEW packages will be INSTALLED:

    blas:           1.0-mkl
    cymem:          1.31.2-py35h6538335_0    conda-forge
    dill:           0.2.8.2-py35_0           conda-forge
    msgpack-numpy:  0.4.4.2-py_0             conda-forge
    murmurhash:     0.28.0-py35h6538335_1000 conda-forge
    plac:           0.9.6-py_1               conda-forge
    preshed:        1.0.0-py35h6538335_0     conda-forge
    pyreadline:     2.1-py35_1000            conda-forge
    regex:          2017.11.09-py35_0        conda-forge
    spacy:          2.0.12-py35h830ac7b_0    conda-forge
    termcolor:      1.1.0-py_2               conda-forge
    thinc:          6.10.3-py35h830ac7b_2    conda-forge
    tqdm:           4.29.1-py_0              conda-forge
    ujson:          1.35-py35hfa6e2cd_1001   conda-forge

The following packages will be UPDATED:

    msgpack-python: 0.4.8-py35_0                         --> 0.5.6-py35he980bc4_3 conda-forge

The following packages will be DOWNGRADED:

    freetype:       2.7-vc14_2               conda-forge --> 2.5.5-vc14_2

Proceed ([y]/n)? y

blas-1.0-mkl.t 100% |###############################| Time: 0:00:00   0.00  B/s
cymem-1.31.2-p 100% |###############################| Time: 0:00:00   1.65 MB/s
msgpack-python 100% |###############################| Time: 0:00:00   5.37 MB/s
murmurhash-0.2 100% |###############################| Time: 0:00:00   1.49 MB/s
plac-0.9.6-py_ 100% |###############################| Time: 0:00:00   0.00  B/s
pyreadline-2.1 100% |###############################| Time: 0:00:00   4.62 MB/s
regex-2017.11. 100% |###############################| Time: 0:00:00   3.31 MB/s
termcolor-1.1. 100% |###############################| Time: 0:00:00 187.81 kB/s
tqdm-4.29.1-py 100% |###############################| Time: 0:00:00   2.51 MB/s
ujson-1.35-py3 100% |###############################| Time: 0:00:00   1.66 MB/s
dill-0.2.8.2-p 100% |###############################| Time: 0:00:00   4.34 MB/s
msgpack-numpy- 100% |###############################| Time: 0:00:00   0.00  B/s
preshed-1.0.0- 100% |###############################| Time: 0:00:00   0.00  B/s
thinc-6.10.3-p 100% |###############################| Time: 0:00:00   5.49 MB/s
spacy-2.0.12-p 100% |###############################| Time: 0:00:10   7.42 MB/s

(C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder) C:\Users\nikhizzz>python -V
Python 3.5.3 :: Anaconda custom (64-bit)

(C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder) C:\Users\nikhizzz>python -m spacy download en
Collecting en_core_web_sm==2.0.0 from https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz#egg=en_core_web_sm==2.0.0
  Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz (37.4MB)
    100% |################################| 37.4MB ...
Installing collected packages: en-core-web-sm
  Running setup.py install for en-core-web-sm ... done
Successfully installed en-core-web-sm-2.0.0

    Linking successful
    C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder\lib\site-packages\en_core_web_sm
    -->
    C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder\lib\site-packages\spacy\data\en

    You can now load the model via spacy.load('en')


(C:\Users\nikhizzz\AppData\Local\conda\conda\envs\tensorflowspyder) C:\Users\nikhizzz>

7
我有几个可能的想法,可以解决这个问题。首先,尝试重新下载模型:python -m spacy download en_core_web_sm - Qusai Alothman
2
顺便提一下,'en' 的默认值是 'en_core_web_sm',因此它们实际上是相同的。请参见这个链接 - Qusai Alothman
3
只需执行 python -m spacy download en_core_web_sm 命令即可。 - Prasanth Rajendran
34个回答

209

一开始我在Anaconda命令提示符中使用以下语句下载了两个英文包。

python -m spacy download en_core_web_lg
python -m spacy download en_core_web_sm

但是,我一直遇到链接错误,最终运行以下命令帮助我建立了链接并解决了错误。

python -m spacy download en

如果您使用Jupyter,请确保重新启动运行时。

附注:如果出现链接错误,请尝试授予管理员权限。


7
这对我也适用。在我的 MacBook 终端上,我运行了python -m spacy download en_core_web_lgpython -m spacy download en_core_web_sm,但在输入 spacy.load('en')spacy.load('en_core_web_lg') 时,在 Python 中仍然会出现 OSError: [E050] Can't find model 'en'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory. 错误。在终端中运行 python -m spacy download en ,然后在 Python 中运行 spacy.load('en') ,我就能够加载模型了。 - arranjdavis
直到@talha-tayyab建议重新启动运行时,我仍然无法解决这个问题。向你们所有人致敬,真是太棒了!https://dev59.com/ibzpa4cB1Zd3GeqPNI0U#68012945 - viktor_vangel
当我尝试这样做时,它会为单词“spacy”给出一个语法错误。 - user16951074

87
你误解的答案在于一个Unix概念,软链接,可以说在Windows中类似于快捷方式。让我们来解释一下。
当你运行 spacy download en 命令时,spaCy会尝试找到最适合与 spaCy 发行版相匹配的小型模型。我所谈论的小型模型默认为 en_core_web_sm,该模型有不同的变体,对应不同版本的 spaCy(例如 spacyspacy-nightly 拥有不同大小的 en_core_web_sm)。
当spaCy找到最适合您的模型后,它会下载并将名称en链接到它下载的包,例如en_core_web_sm。这基本上意味着,每当您引用en时,您将引用en_core_web_sm。换句话说,在链接之后,en不是一个“真正”的包,只是en_core_web_sm的名称。然而,反过来就不行。您无法直接引用 en_core_web_sm,因为您的系统不知道您已经安装了它。当您执行 spacy download en 命令时,实际上相当于执行了 pip 安装。因此,pip 知道您已经为 Python 分发安装了一个名为 en 的软件包,但是对 en_core_web_sm 软件包一无所知。这个软件包只是在您导入它时替换了软件包 en,也就是说,软件包 en 只是指向 en_core_web_sm 的软链接。

当然,您可以直接下载 en_core_web_sm,使用命令:python -m spacy download en_core_web_sm,或者您甚至可以将名称 en 链接到其他模型。例如,您可以执行 python -m spacy download en_core_web_lg,然后执行 python -m spacy link en_core_web_lg en。这将使 en 成为 en_core_web_lg 的名称,后者是针对英语语言的大型 spaCy 模型。

希望现在清楚了 :)


3
没问题!我使用MacBook Pro和Spacy,所需模块为en_core_web_lg。 - AlketCecaj

42

以下方法对我有效:

import en_core_web_sm

nlp = en_core_web_sm.load()

如果在尝试上述命令后出现错误(No module named 'en_core_web_sm'),则请执行以下答案 - Prasanth Rajendran
如果这个解决方案对您有用,那么您可以使用print(en_core_web_sm.__file__)找出模块的路径,并检查它是否安装在您想要使用的正确版本的Python中。 - Zhu Weiji

19

对于那些即使在以管理员身份从Anaconda提示符安装后仍然遇到问题的人,这里是一个快速解决方法:

  1. 前往下载路径。例如:

C:\Users\name\AppData\Local\Continuum\anaconda3\Lib\site-packages\en_core_web_sm\en_core_web_sm-2.2.0
  • 复制路径。

  • 粘贴到:

    nlp = spacy.load(r'C:\Users\name\AppData\Local\Continuum\anaconda3\Lib\site-packages\en_core_web_sm\en_core_web_sm-2.2.0')
    
  • 非常好用 :)

  • PS:检查 spacy 版本


    我复制粘贴了代码,但是出现了错误 OSError: [E049] Can't find spaCy data directory: 'None'. Check your installation and permissions, or use spacy.util.set_data_path to customise the location if necessary. 你知道发生了什么吗? - wawawa
    这个解决方案同样适用于Google Colab。 - B-Abbasi

    18

    在Colab中使用Spacy语言模型只需要以下两个步骤:

    1. 下载模型(根据模型大小更改名称)
    !python -m spacy download en_core_web_lg 
    
    1. 重新启动colab的运行时! 执行快捷键:Ctrl + M + .

    测试

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

    成功!


    15

    我建议你尝试这种方法,因为它对我非常有效:

    在你的Anaconda提示符中,运行以下命令:

    !python -m spacy download en
    

    运行上述命令后,您应该能够在jupyter笔记本中执行以下操作:

    spacy.load('en_core_web_sm')
    

    @ Pallavi Banerjee,你的答案与Tarun Reddy的答案没有显著区别。 - H S Rathore

    11
    不要在 jupyter 中运行 !python -m spacy download en_core_web_lg 命令。 请改为执行以下命令:
    import spacy.cli
    spacy.cli.download("en_core_web_lg")
    

    要让上述两个命令正常运行,您可能需要重启内核。


    6

    根据不同版本的spacy加载模块的步骤:

    下载与您的spaCy安装相匹配的特定模型的最佳匹配版本

    python -m spacy download en_core_web_sm
    pip install .tar.gz archive from path or URL
    pip install /Users/you/en_core_web_sm-2.2.0.tar.gz
    

    或者

    pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.2.0/en_core_web_sm-2.2.0.tar.gz
    

    将以下内容添加到您的requirements文件或环境yaml文件中。有一系列版本与一个spacy版本兼容,您可以在https://github.com/explosion/spacy-models/releases中查看更多信息。
    如果不确定,请运行以下代码。
    nlp = spacy.load('en_core_web_sm') 
    

    将会发出警告,告诉您安装的Spacy版本与哪个版本模型兼容。

    environment.yml 示例

    name: root
    channels:
      - defaults
      - conda-forge
      - anaconda
    dependencies:
      - python=3.8.3
      - pip
      - spacy=2.3.2
      - scikit-learn=0.23.2
      - pip:
        - https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.3.1/en_core_web_sm-2.3.1.tar.gz#egg=en_core_web_sm
    

    5

    我正在Windows上运行Jupyter Notebook。

    最终,这是一个版本问题,需要在conda cmd提示符(以管理员身份打开)中执行以下命令:

    • pip install spacy==2.3.5

    • python -m spacy download en_core_web_sm

    • python -m spacy download en

    from chatterbot import ChatBot
    import spacy
    import en_core_web_sm
    nlp = en_core_web_sm.load()
    ChatBot("hello")
    

    输出 - 在此输入图片描述


    5

    有人能否告诉我这是否正确?因为它可以工作,而且上面没有其他内容。 - Anuj Sharma
    是的!这在PyCharm中可以工作。不确定为什么他们展示了load方法然后又有了这个版本,就像为什么有两个load方法一样。 - Rob
    这真的有效! - undefined

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接