我正在尝试腌制贝叶斯类对象。我的代码是:

file = open('Bayes.pkl', 'wb')
pickle.dump(bayes, file)
file.close()


我收到以下错误


  TypeError:无法腌制instancemethod对象


为了克服这个问题,我提到了这个StackOverflow解决方案:
    How to remove instancemethod objects, for the sake of pickle, without modifying the original class

声明使用方法getstate()和setstate()。这行得通,我可以使我的文件腌制。
但是,当我尝试测试数据时,出现以下错误:

 File "/home/anaconda2/lib/python2.7/site-packages/reverend/thomas.py", line 254, in guess
 res[pname]=self.combiner(p, pname)
 TypeError: 'NoneType' object is not callable


我的代码如下:

    my_str = ' '
    for val in sourceCode:
        my_str += str(val)
    results = classifier.guess(my_str)
    print results


my_str的类型是字符串。但是,仍然没有猜测。

最佳答案

您的班级通过bayes.save('bayes.pkl')bayes.load('bayes.pkl')拥有自己的酸洗/解酸支持。它执行以下操作:

def save(self, fname='bayesdata.dat'):
    from cPickle import dump
    fp = open(fname, 'wb')
    dump(self.pools, fp)
    fp.close()

def load(self, fname='bayesdata.dat'):
    from cPickle import load
    fp = open(fname, 'rb')
    self.pools = load(fp)
    fp.close()
    self.corpus = self.pools['__Corpus__']
    self.dirty = True

10-08 12:43