ChatterBot错误 - OSError:[E941]找不到模型'en'。

10

我尝试运行我的第一个Chatterbot程序(源自Chatterbot的PyPi页面),但运行时出现了错误。这个错误与Spacy有关,但我找不到解决方案。

以下是代码:

from chatterbot.trainers import ChatterBotCorpusTrainer

chatbot = ChatBot('Ron Obvious')

trainer = ChatterBotCorpusTrainer(chatbot)

trainer.train("chatterbot.corpus.english")

chatbot.get_response("Hello, how are you today?")

这里是错误信息:

Traceback (most recent call last):
  File "c:/users/USER/desktop/bot.py", line 77, in <module>
    chatbot = ChatBot('Ron Obvious')
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\chatterbot.py", line 28, in __init__
    self.storage = utils.initialize_class(storage_adapter, **kwargs)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\utils.py", line 33, in initialize_class
    return Class(*args, **kwargs)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\storage\sql_storage.py", line 20, in __init__
    super().__init__(**kwargs)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\storage\storage_adapter.py", line 21, in __init__
    'tagger_language', languages.ENG
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\tagging.py", line 13, in __init__
    self.nlp = spacy.load(self.language.ISO_639_1.lower())
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\spacy\__init__.py", line 47, in load
    return util.load_model(name, disable=disable, exclude=exclude, config=config)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\spacy\util.py", line 328, in load_model
    raise IOError(Errors.E941.format(name=name, full=OLD_MODEL_SHORTCUTS[name]))
OSError: [E941] Can't find model 'en'. It looks like you're trying to load a model from a shortcut, which is deprecated as of spaCy v3.0. To load the model, use its full name instead:

nlp = spacy.load("en_core_web_sm")

For more details on the available models, see the models directory: https://spacy.io/models. If you want to create a blank model, use spacy.blank: nlp = spacy.blank("en")

如果有人能找到解决方法,那会很有帮助。谢谢。


2
可能的解决方案之一是将 spacy 降级到 2.x 版本,例如 pip install -U spacy==2.1.3 - Wiktor Stribiżew
2
在使用它之前,您可能需要执行 python -m spacy download en_core_web_sm - aneroid
9个回答

17

确保您已安装正确的spacy模型。例如,在终端中使用 python -m spacy download en_core_web_sm 命令安装 en_core_web_sm

接下来,修复此错误:

File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\tagging.py", line 13, in __init__
    self.nlp = spacy.load(self.language.ISO_639_1.lower())

也就是说,

  1. 打开 C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\tagging.py 文件。
  2. 进入第13行。
  3. self.nlp = spacy.load(self.language.ISO_639_1.lower()) 替换为
if self.language.ISO_639_1.lower() == 'en':
    self.nlp = spacy.load('en_core_web_sm')
else:
    self.nlp = spacy.load(self.language.ISO_639_1.lower())

您需要添加更多条件以支持其他语言。


非常感谢您的帮助! - Ezequiel Miceli
@EzequielMiceli 不用谢! - Wiktor Stribiżew

4
除了其他评论之外,请注意SpaCy 3.0.3和Python 3.8存在的问题 - 如果您正在使用这些版本,则可能需要通过Python shell下载语言模型,例如:
import spacy
from spacy.cli.download import download
download(model="en_core_web_sm")

对于这些版本,通过python -m spacy download en_core_web_sm下载可能会导致异常情况-如在此处描述的一样。此处

4

检查您正在使用的spacy版本。

安装spacy并下载语言模型,在这种情况下使用en_core_web_sm

 python -m spacy download en_core_web_sm

如果是v3.0版本,您需要使用以下方式进行加载

nlp = spacy.load("en_core_web_sm")

如果版本号低于v3.0,您可以使用快捷方式链接模型创建。
python -m spacy link en_core_web_sm en

并且可以使用 nlp = spacy.load("en") 加载它。


我仍然遇到同样的问题。我认为[在撰写本文时]最好的做法是降级到较低版本的spacy(可能是版本2.1.3)。然后使用此命令重新下载en_core_web_smpython -m spacy download en_core_web_sm。这应该会给你en_core_web_sm==2.1.0,然后你可以应用链接(即python -m spacy link en_core_web_sm en)。 - Alvindera97

0
尝试只安装spaCy,使用命令pip install -U spacy 然后更改代码。
self.nlp = spacy.load(self.language.ISO_639_1.lower()) 

C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\tagging.py

if self.language.ISO_639_1.lower() == 'en':
   self.nlp = spacy.load('en_core_web_sm')
else:
  self.nlp = spacy.load(self.language.ISO_639_1.lower()) 

0

尝试使用命令 >>pip install -U spacy 安装spacy

然后修改代码

self.nlp = spacy.load(self.language.ISO_639_1.lower()) 

从"C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\tagging.py"到

  if self.language.ISO_639_1.lower() == 'en':
     self.nlp = spacy.load('en_core_web_sm')
  else:
    self.nlp = spacy.load(self.language.ISO_639_1.lower()) 

在这里为我找工作,我也遇到了同样的问题


0

针对 LinuxMac 用户:

在上面得到最高投票答案的基础上,我想补充说明一下 tagging.py 的位置是:

/usr/local/lib/python3.7/site-packages/chatterbot

更加精确地说: <Python安装路径>/site-packages/chatterbot安装路径也可能是您的虚拟环境路径

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0
首先,您需要运行以下命令下载en_core_web_sm:python -m spacy download en_core_web_sm
您需要修改以下代码。 输入图像描述

0
如果以下方式下载程序包无法正常运行:

python -m spacy download en_core_web_sm

那么您不需要更改程序包中的代码,只需更改原因。

from chatterbot import languages

languages.ENG.ISO_639_1 = "en_core_web_sm"

它将会把spacy中的“en”更改为“en_core_web_sm”。

0

确保您已经安装了正确的Spacy模型。例如,在终端中使用python -m spacy download en_core_web_sm命令安装en_core_web_sm

接下来,修复这个错误:

File "C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\tagging.py", line 13, in __init__

> `self.nlp = spacy.load(self.language.ISO_639_1.lower())`


那就是,
打开文件 C:\Users\USER\AppData\Local\Programs\Python\Python37\lib\site-packages\chatterbot\tagging.py 转到第13行
替换 self.nlp = spacy.load(self.language.ISO_639_1.lower())if self.language.ISO_639_1.lower() == 'en': self.nlp = spacy.load('en_core_web_sm') else: self.nlp = spacy.load(self.language.ISO_639_1.lower()) 你需要为其他需要支持的语言添加更多条件。
对我来说,这个工作很好,我推荐它!

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