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



我试着运行我的第一个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:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbotchatterbot.py", line 28, in __init__
self.storage = utils.initialize_class(storage_adapter, **kwargs)
File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbotutils.py", line 33, in initialize_class
return Class(*args, **kwargs)
File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbotstoragesql_storage.py", line 20, in __init__
super().__init__(**kwargs)
File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbotstoragestorage_adapter.py", line 21, in __init__
'tagger_language', languages.ENG
File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbottagging.py", line 13, in __init__
self.nlp = spacy.load(self.language.ISO_639_1.lower())
File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packagesspacy__init__.py", line 47, in load
return util.load_model(name, disable=disable, exclude=exclude, config=config)
File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packagesspacyutil.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")

如果有人能找到解决这个问题的办法,那将是很有帮助的。谢谢

确保实际安装了正确的spacy型号。例如,在终端中使用python -m spacy download en_core_web_sm命令安装en_core_web_sm

接下来,修复这个错误:

File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbottagging.py", line 13, in __init__
self.nlp = spacy.load(self.language.ISO_639_1.lower())

也就是说,

  1. 打开C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbottagging.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())

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

检查您正在使用的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 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下载可能会导致异常——如前所述。

首先,您需要通过运行:python-m spacy download en_core_web_sm 来下载en_core_web_sm

您需要修改以下代码。

在此处输入图像描述

尝试使用>gt;pip安装-U spacy

并更改代码

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

在";C: \Users\USER\AppData\Local\Programs\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()) 

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

对于LinuxMac用户:

对于以上投票最多的答案,我将添加tagging.py的位置为:

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

更准确地说:

<Install_path_of_Python>/site-packages/chatterbot

(安装路径也可以是您的虚拟环境路径)

尝试只安装带有pip install -U spacy的spacy

并更改代码

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

C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbottagging.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()) 

如果下载包不起作用,如下所示:

python-m spacy下载en_core_web_sm

则不需要更改包中的代码,只需更改原因即可。

来自话匣子导入语言

语言。ENG.ISO_639_1=";en_ core_;

它将改变";en";至";en_ core_;对于spacy

确保实际安装了正确的spacy型号。例如,在终端中使用python -m spacy download en_core_web_sm命令安装en_core_web_sm

接下来,修复这个错误:

File "C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbottagging.py", line 13, in __init__
> `self.nlp = spacy.load(self.language.ISO_639_1.lower())`

也就是说,

  1. 打开C:UsersUSERAppDataLocalProgramsPythonPython37libsite-packageschatterbottagging.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())
    

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

它对我有用,我推荐了这个!

最新更新