保存和加载测试以另一种方法对NLTK中的朴素贝叶斯分类器进行分类 [英] Save and Load testing classify Naive Bayes Classifier in NLTK in another method
问题描述
我从这里尝试过代码:在NLTK中保存朴素贝叶斯训练分类器. 我想将推文分为正面类或负面类. 这是我的代码:
I have try the code from here: Save Naive Bayes Trained Classifier in NLTK. I want to classify tweet into positive class or negative class. this is my code:
#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_classifier
和load_classifier
时,输出将始终为正类.
But, when I try the save_classifier
and load_classifier
in different method, the output become always positive class.
这是代码:
#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
类.
The second output is: positive
.
It should be still negative
class.
我的代码会发生什么?? 谢谢
What happen with my code?? Thanks
从@Cassio的答案中,然后编辑代码:
From the answer from @Cassio then I edit my code:
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
实际上是可行的.
推荐答案
我没有环境设置来测试您的代码,但是我觉得在您保存/加载泡菜的那部分是不合适的.
I don't have the environment setup to test out your code, but I have the feeling it's not right in the part where you save/load the pickle.
请参阅NLTK图书的存储标记书部分,我将更改您的代码并执行像这样:
Referring to the Storing Taggers section of the NLTK book, I would change your code and do it like this:
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
希望有帮助.
这篇关于保存和加载测试以另一种方法对NLTK中的朴素贝叶斯分类器进行分类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!