我有一个名为classifier.pkl
的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'))
我的代码是unpickle:
features, extract_features, classifier =
cPickle.load(open('cocaine_classifier.pkl','rb'))
我的错误:
AttributeError: 'module' object has no attribute 'extract_features'
不久前,我通过挑选三件事来制作.pkl
文件:
令人费解的是,我使用以下代码得到了同样的错误:
x = cPickle.load(open('cocaine_classifier.pkl','rb'))
为什么我不能检索三件事?即使我不打算拆开元组?
更新
正如NPE所指出的那样,要被打开的函数的路径必须与其被打开的函数完全匹配。我正在调试和终端,因此from mod import *
将所有内容加载到命名空间中,而import mod as m
则没有。
答案 0 :(得分:1)
问题在于,当你挑选一个函数时,只会腌制函数的(完全限定的)名称,而不是函数本身。这意味着当你进行unpickling时,你必须有功能定义。
你有没有想要挑选调用extract_features
的结果?