在 运行 脚本上重新加载 SpaCy 语言模型

Reload SpaCy language model on a running script

我开发了一个使用 SpaCy 模型的简单模型 en_core_web_lg。项目结构如下:

/model/
    main.py
    app_functions.py
    SpaCy/
          SpaCy_clases.py

在 SpaCy_clases.py 我有这样的东西:

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

class Spacy1():
   ...
   ...

class Spacy2():
   ...
   ...

我面临的问题是那一行:

nlp = spacy.load('en_core_web_lg')  

由于我需要在定义 类 的同一个文件中导入模型,因此一直使用同一个模型,我希望能够更改它。

我需要有更改的选项:

nlp = spacy.load('en_core_web_lg') 

作者:

nlp = spacy.load('en_core_web_sm') 

但是,如果我使用 main.py 中的某个变量来执行此操作,那根本没有任何区别。如何在不停止程序和编辑 SpaCy_clases.py

的情况下加载不同的模型

我想在项目的整个范围内更改模型,因为它已在多个步骤中使用。但是所有使用 Spacy 的 类 都定义在 SpaCy_classes.py 所有其他文件从那里导入这个 类。

如果你只在SpaCy_clases中使用nlp,那么有一种方法。

from SpaCy import SpaCy_clases

# you want to change the nlp attribute of SpaCy_clases 
# if really really want to reload, which is bad practice 
SpaCy_clases.nlp = spacy.load('what_you_want')

真的不推荐,但是可以用。上面改变nlp的方法实际上是在很多文件中使用一个全局可写变量,这是非常非常糟糕的事情。