保存和加载测试以另一种方法在NLTK中对Naive Bayes分类器进行分类

时间:2013-06-23 15:33:45

标签: python classification nltk

我从这里尝试了代码:Save Naive Bayes Trained Classifier in NLTK。 我想将推文归类为正类或负类。 这是我的代码:

#learning.py
def main_learning():
   .......
   classifier = nltk.NaiveBayesClassifier.train(feature_set)
   save_classifier(classifier)

   classifier2 = load_classifier()
   print classifier2.classify(get_features("My tweet is bad".split())

def save_classifier(classifier):
   f = open('my_classifier.pickle', 'wb')
   pickle.dump(classifier, f)
   f.close()

def load_classifier():
   f = with open('my_classifier.pickle')
   classifier = pickle.load(f)
   f.close
   return classifier

然后输出:negative

但是,当我以不同的方法尝试save_classifierload_classifier时,输出将始终为正类。

这是代码:

#learning.py
def main_learning():
   .......
   classifier = nltk.NaiveBayesClassifier.train(feature_set)
   save_classifier(classifier)

def test_classify():
   classifier = load_classifier()
   print classifier.classify(get_features("My tweet is bad".split())

the def save_classifier and load_classifier() are same with the first ones.

第二个输出是:positive。 它应该仍然是negative类。

我的代码怎么了? 感谢

编辑:

从@Cassio的回答中,我编辑了我的代码:

def save_classifier(classifier):
       f = open('my_classifier.pickle', 'wb')
       pickle.dump(classifier, f)
       f.close()

def load_classifier():
   f = with open('my_classifier.pickle', 'rb')
   classifier = pickle.load(f)
   f.close
   return classifier

实际上它有效。

1 个答案:

答案 0 :(得分:3)

我没有环境设置来测试您的代码,但我觉得在保存/加载pickle的部分不正确。

参考NLTK书籍的Storing Taggers部分,我会更改您的代码并按照以下方式执行:

def save_classifier(classifier):
   f = open('my_classifier.pickle', 'wb')
   pickle.dump(classifier, f, -1)
   f.close()

def load_classifier():
   f = open('my_classifier.pickle', 'rb')
   classifier = pickle.load(f)
   f.close()
   return classifier

希望它有所帮助。