Spacy:找不到模型“en_core_web_sm”。它似乎不是一个 Python 包或数据目录的有效路径

问题描述 投票:0回答:3

我正在尝试加载

en_core_web_sm
spaCy 模型,但我没有成功。

发生的错误如下:

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

我正在 Anaconda 虚拟环境中工作。勾选以下复选框:

  • 在安装 spaCy 和英语语言模型之前是否
    conda activate gcp-env
  • 在正确的环境中运行
    conda install -c conda-forge spacy
  • 然后,运行
    python -m spacy download en
    ,仍然在正确的环境中
  • 还尝试将
    spacy
    添加到
    requirements.txt
    ,并在第一次尝试失败后通过该路线安装依赖项

spacy info
产生以下输出:

spacy info

============================== Info about spaCy ==============================

spaCy version    3.3.0                         
Location         /Users/simonmortensen/opt/anaconda3/envs/gcp-env/lib/python3.10/site-packages/spacy
Platform         macOS-11.6.5-x86_64-i386-64bit
Python version   3.10.4                        
Pipelines        en_core_web_sm (3.3.0)

python -m spacy validate
产生以下输出:

================= Installed pipeline packages (spaCy v3.3.0) =================
ℹ spaCy installation:
/Users/simonmortensen/opt/anaconda3/envs/gcp-env/lib/python3.10/site-packages/spacy

NAME             SPACY                 VERSION                            
en_core_web_sm   >=3.3.0.dev0,<3.4.0   3.3.0   ✔

我之前已经浏览过几篇关于同一主题的 StackOverflow 帖子。这些问题通常都得到了解决,但我的问题仍然存在。

任何建议将不胜感激。预先感谢!

西蒙

编辑: 对于其他上下文,环境中的

pip list
包含两者

spacy                         3.3.0
spacy-legacy                  3.0.9
spacy-loggers                 1.0.2

en-core-web-sm                3.3.0

即便如此,

import en_core_web_sm
也不起作用:

import en_core_web_sm
Traceback (most recent call last):

  Input In [65] in <cell line: 1>
    import en_core_web_sm

ModuleNotFoundError: No module named 'en_core_web_sm'
python nlp anaconda conda spacy
3个回答
2
投票

Spyder 是恶棍。

所有软件包均已正确安装在虚拟环境中,但 Spyder 未运行该环境(即使从实际上已激活环境的终端使用

spyder
命令启动 IDE)。

为了使Spyder运行在正确的环境中,您需要在Spyder首选项中更改Python解释器: ...然后重新启动内核。

我收到一个错误提示我

pip install spyder-kernels==2.1.*
,但是一旦完成(确保在正确的venv上执行),我重新启动了Spyder,它终于成功了!

请参阅线程中的讨论:https://github.com/explosion/spaCy/discussions/10895


0
投票

我认为这没有走环境好的道路。

在终端执行 which python ,并且您必须验证是否采用环境路径。


0
投票

需要注意的是,spaCy 模型本质上是普通的 Python 包。所以你可以先检查它们是否存在,如果不存在,请下载并安装它们。以下功能仅在确实需要时才尝试下载...

import spacy

def install_spacy_model(spacy_model_id: str="en_core_web_sm", quiet: bool=False):
    # Initiate the download only if it is really necessary (i.e. if the language pack is not installed).

    if spacy.util.is_package(spacy_model_id):
        print(f"spaCy model: [{spacy_model_id}] is already installed and will therefore not be downloaded again.")
    else:
        print(f"spaCy model: [{spacy_model_id}] was not found. Download initiated...")
    
        # Suppress pip installation messages on request.
        if quiet:
            spacy.cli.download(spacy_model_id, False, False, "--quiet")
        else:
            spacy.cli.download(spacy_model_id, False, False)
        

现在就称呼它..

install_spacy_model()

结果:

>> spaCy model: [en_core_web_sm] was not found. Download initiated...
>> ✔ Download and installation successful
>> You can now load the package via spacy.load('en_core_web_sm')
© www.soinside.com 2019 - 2024. All rights reserved.