导入错误:[E048] 无法从 spacy.lang 导入语言 custom_en:没有名为“spacy.lang.custom_en”的模块

问题描述

spacy 3.0 中,我已经注册了我的自定义语言,如下所示:

import spacy
from spacy.lang.en import English

class CustomEnglishDefaults(English.Defaults):
    stop_words = set(["custom","stop"])

@spacy.registry.languages("custom_en")
class CustomEnglish(English):
    lang = "custom_en"
    Defaults = CustomEnglishDefaults

我试过代码nlp = spacy.blank("custom_en") 并且它工作正常。 但是当我在 lang="custom-en" 文件中使用 config.cfg 并使用命令时:

python -m spacy train config.cfg --paths.train ./train.spacy --paths.dev ./dev.spacy

我收到以下错误

Traceback (most recent call last):
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/spacy/util.py",line 244,in get_lang_class
    module = importlib.import_module(f".lang.{lang}","spacy")
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/importlib/__init__.py",line 127,in import_module
    return _bootstrap._gcd_import(name[level:],package,level)
  File "<frozen importlib._bootstrap>",line 1014,in _gcd_import
  File "<frozen importlib._bootstrap>",line 991,in _find_and_load
  File "<frozen importlib._bootstrap>",line 973,in _find_and_load_unlocked
ModuleNotFoundError: No module named 'spacy.lang.custom_en'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/runpy.py",line 194,in _run_module_as_main
    return _run_code(code,main_globals,None,File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/runpy.py",line 87,in _run_code
    exec(code,run_globals)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/spacy/__main__.py",line 4,in <module>
    setup_cli()
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/spacy/cli/_util.py",line 69,in setup_cli
    command(prog_name=COMMAND)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/click/core.py",line 829,in __call__
    return self.main(*args,**kwargs)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/click/core.py",line 782,in main
    rv = self.invoke(ctx)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/click/core.py",line 1259,in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/click/core.py",line 1066,in invoke
    return ctx.invoke(self.callback,**ctx.params)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/click/core.py",line 610,in invoke
    return callback(*args,**kwargs)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/typer/main.py",line 497,in wrapper
    return callback(**use_params)  # type: ignore
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/spacy/cli/train.py",line 56,in train_cli
    nlp = init_nlp(config,use_gpu=use_gpu)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/spacy/training/initialize.py",line 39,in init_nlp
    nlp = load_model_from_config(raw_config,auto_fill=True)
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/spacy/util.py",line 425,in load_model_from_config
    lang_cls = get_lang_class(nlp_config["lang"])
  File "/home/marzi/anaconda3/envs/spacy-tutorial/lib/python3.8/site-packages/spacy/util.py",line 246,in get_lang_class
    raise ImportError(Errors.E048.format(lang=lang,err=err)) from err
ImportError: [E048] Can't import language custom_en from spacy.lang: No module named 'spacy.lang.custom_en'

我该如何解决这个问题?

解决方法

请参阅本节右侧的边栏:https://spacy.io/usage/linguistic-features#language-subclass

python -m spacy train config.cfg --code code.py

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...