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'

少し前に、私は.pkl3つのものを漬けてファイルを作成しました。

  • 機能:リスト
  • extract_features:関数
  • 分類器:NLTKナイーブベイズ分類器のインスタンス

不可解なことに、次のコードでも同じエラーが発生します。

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

なぜ3つ取得できないのですか?タプルを開梱しようとしていないときでも?

アップデート

NPEが指摘したように、選択解除される関数のパスは、選択解除される関数と正確に一致する必要があります。私はデバッグとターミナルを行っていたので、from mod import *すべてを名前空間にロードしますが、ロードimport mod as mしません。

4

1 に答える 1

1

問題は、関数をピクルすると、関数自体ではなく、関数の (完全修飾された) 名前のみがピクルされることです。これは、unpickle するときに関数定義を配置する必要があることを意味します。

ひょっとしてを呼び出した結果をピクルするつもりだったのextract_featuresですか?

于 2012-12-12T20:10:24.900 に答える