2

我有一个名为的腌制文件classifier.pkl,我正在尝试将其加载到另一个模块中。但是,我收到一个我不明白的错误。

我的腌制代码:

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'

不久前,我.pkl通过腌制三件事来制作文件:

  • 特点:列表
  • extract_features : 函数
  • 分类器:NLTK 朴素贝叶斯分类器的实例

令人费解的是,我在以下代码中遇到了同样的错误:

x = cPickle.load(open('cocaine_classifier.pkl','rb'))

为什么我不能检索三样东西?即使我不想解包元组?

更新

正如 NPE 指出的那样,要取消腌制的函数的路径必须与取消腌制的函数完全匹配。我正在调试和终端,因此from mod import *将所有内容加载到命名空间中,而import mod as m没有。

4

1 回答 1

1

问题是当你腌制一个函数时,只有函数的(完全限定的)名称被腌制,而不是函数本身。这意味着您必须在 unpickling 时将函数定义到位。

你有没有故意腌制call的结果extract_features

于 2012-12-12T20:10:24.900 回答