属性错误:无法在来自'manage.py'的<module '__main__'>模块上获取属性。

10
def getNer(text):
    with open('chunker.pkl', 'rb') as pickle_file:
        chunker = pickle.load(pickle_file)
    return chunker.parse(pos_tag(word_tokenize(text)))

运行此函数没有问题 但是当我将此函数包含在我的Django项目中时 我会遇到以下错误
chunker = pickle.load(pickle_file)
AttributeError: Can't get attribute 'NamedEntityChunker' on <module '__main__' from 'manage.py'>

被pickle的对象是:
class NamedEntityChunker(ChunkParserI):
    def __init__(self, train_sents, **kwargs):
        assert isinstance(train_sents, Iterable)

        self.feature_detector = features
        self.tagger = ClassifierBasedTagger(
            train=train_sents,
            feature_detector=features,
            **kwargs)

    def parse(self, tagged_sent):
        chunks = self.tagger.tag(tagged_sent)
        iob_triplets = [(w, t, c) for ((w, t), c) in chunks]
        return conlltags2tree(iob_triplets)

我正在使用最新版本的Django和Python3。

2个回答

9

我曾遇到过同样的错误——结果是在尝试打开它之前我没有导入该类。GUI需要知道如何构造对象才能读取它。请尝试:

from YourModuleName import NamedEntityChunker

在调用您的开放函数之前。

4

在Django的views.py文件中加载经过pickle处理的机器学习模型时,我遇到了同样的问题(该模型是从头构建的)。通过在manage.py文件中导入已保存或序列化在ML模型中的函数,并在调用主方法之前立即执行该函数,我成功地解决了这个错误。举个例子:

if __name__ == '__main__':

    from ml_model.nb_model import NB
    main()

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