Hey I am trying to use a Naive Bayes classifier to classify some text. I am using NLTK. Whenever I test the classifier using the classify() method it always returns the correct classification for the first item, and the same classification for every other line of text I classify. The following is my code:
from nltk.corpus import movie_reviews
from nltk.tokenize import word_tokenize
import nltk
import random
import nltk.data
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
random.shuffle(documents)
all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = all_words.keys()[:2000]
def bag_of_words(words):
return dict([word,True] for word in words)
def document_features(document):
document_words = set(document)
features = {}
for word in word_features:
features['contains(%s)' % word] = (word in document_words)
return features
featuresets = [(document_features(d), c) for (d,c) in documents]
train_set, test_set = featuresets[100:], featuresets[:100]
classifier = nltk.NaiveBayesClassifier.train(train_set)
text1="i love this city"
text2="i hate this city"
feats1=bag_of_words(word_tokenize(text1))
feats2=bag_of_words(word_tokenize(text2))
print classifier.classify(feats1)
print classifier.classify(feats2)
This code will print pos twice where as if I flipped the last 2 lines of the code it will print neg twice. Can anyone help?
Change
to
Otherwise the classifier only knows about “words” of the form “contains(…)”, and is therefore clueless about the words in
"i love this city"yields