我有一个名为 classifier.pkl
的 pickled 文件,我正试图将其加载到另一个模块中。但是,我收到一个我不明白的错误。
我要 pickle 的代码:
features = ['bob','ice','snowing'] #... shortened for exposition's sake
def extract_features(document):
return {'contains(%s)'% word: (word in set(document))
for word in all_together_word_list}
training_set = classify.util.apply_features(extract_features,tweets[0])
classifier = NaiveBayesClassifier.train(training_set)
cPcikle.dump(open('cocaine_classifier.pkl','wb'))
我要解开的代码:
features, extract_features, classifier =
cPickle.load(open('cocaine_classifier.pkl','rb'))
我的错误:
AttributeError: 'module' object has no attribute 'extract_features'
不久前,我通过 pickle 三样东西制作了 .pkl
文件:
- 特征:列表
- extract_features:函数
- 分类器:NLTK 朴素贝叶斯分类器的实例
令人费解的是,我用下面的代码得到了同样的错误:
x = cPickle.load(open('cocaine_classifier.pkl','rb'))
为什么我不能取回三样东西?即使我不尝试解包元组?
更新
正如 NPE 所指出的,要解封的函数的路径必须与要解封的函数完全匹配。我正在调试和终端,所以 from mod import *
将所有内容加载到命名空间中,而 import mod as m
则没有。
最佳答案
问题是,当您 pickle 一个函数时,只会 pickle 函数的(完全限定的)名称,而不是函数本身。这意味着您必须在进行 unpickling 时将函数定义就位。
您是否有意 pickle 调用 extract_features
的结果?
关于python - 如何破译这个 cPickle 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847450/