feature_names.sort() TypeError: '<' не поддерживается между экземплярами 'str' и 'tuple'
Я пытаюсь классифицировать текст с помощью полиномиального классификатора с экстрактором функций Bigram. Коды следующие:
from nltk.classify.scikitlearn import SklearnClassifier
from sklearn.naive_bayes import MultinomialNB
from nltk.tokenize import word_tokenize
######### import for bigram########
import itertools
from nltk.collocations import BigramCollocationFinder
from nltk.metrics import BigramAssocMeasures
btagger=bangla_pos_tagger.BanglaTagger()
short_pos = open("short_reviews/pos.txt","r", encoding = 'utf8').read()
short_neg = open("short_reviews/neg.txt","r", encoding = 'utf8').read()
all_words = []
documents = []
allowed_word_types = ["JJ", "NN","NC","PP","NNP"]
for p in short_pos.split('\n\n'):
words = word_tokenize(p)
documents.append( (filtered_words, "pos") )
pos = btagger.pos_tag(filtered_words)
for w in pos:
if w[1] in allowed_word_types:
all_words.append(w[0])
for p in short_neg.split('\n\n'):
words = word_tokenize(p)
documents.append( (words, "neg") )
pos = btagger.pos_tag(filtered_words)
for w in pos:
if w[1] in allowed_word_types:
all_words.append(w[0])
all_words = nltk.FreqDist(all_words)
word_features = list(all_words.keys())[:12000]
def best_word_feats(words):
return dict([(word, True) for word in words if word in word_features])
def best_bigram_features(words, score_fn=BigramAssocMeasures.chi_sq, n=250):
bigram_finder = BigramCollocationFinder.from_words(words)
bigrams = bigram_finder.nbest(score_fn, n)
d = dict([(bigram, True) for bigram in bigrams])
d.update(best_word_feats(words))
featuresets = [(best_bigram_features(rev), category) for (rev, category) in documents]
random.shuffle(featuresets)
training_set = featuresets[:2250]
testing_set = featuresets[2250:]
MNB_classifier = SklearnClassifier(MultinomialNB())
MNB_classifier.train(training_set)
print("MNB_classifier accuracy percent:", (nltk.classify.accuracy(MNB_classifier, testing_set))*100)
Но это дает мне ошибку, говоря:
feature_names.sort()
TypeError: '<' not supported between instances of 'str' and 'tuple'
Это в строке:
MNB_classifier.train(training_set)
Этот код отлично работает, когда я применяю best_words_features
только. Но это идет не так с best_bigram_features
, Я не знаю, в чем проблема, если мне нужно изменить метод извлечения функций или параметры обучения.