Документация и пример
Строка, сообщающая об ошибке, вызывает метод SentimentAnalyzer.evaluate (...). Этот метод выполняет следующие действия.
Оценка и печать производительности классификатора на тестовом наборе.
См. SentimentAnalyzer.evaluate .
Метод имеет один обязательный параметр: test_set.
test_set - список (токенов, меток) кортежей для использования в качестве набора золота.
В примере на http://www.nltk.org/howto/sentiment.html test_set имеет следующую структуру:
[({'contains(,)': False, 'contains(.)': True, 'contains(and)': False, 'contains(the)': True}, 'subj'), ({'contains(,)': True, 'contains(.)': True, 'contains(and)': False, 'contains(the)': True}, 'subj'), ...]
Вот символическое представление структуры.
[(dictionary,label), ... , (dictionary,label)]
Ошибка в вашем коде
Вы передаете
list(zip(new_data['Articles']))
в SentimentAnalyzer.evaluate. Я предполагаю, что вы получаете ошибку, потому что
list(zip(new_data['Articles']))
не создает список (токенов, меток) кортежей. Вы можете проверить это, создав переменную, которая содержит список, и распечатав его, или посмотрев на значение переменной во время отладки. EG
test_set = list(zip(new_data['Articles']))
print("begin test_set")
print(test_set)
print("end test_set")
Вы вызываете метод оценки правильно на 3 строки выше той, которая выдает ошибку.
score = analyzer.evaluate(list(zip(_test_X, test_y)))
Полагаю, вы хотите вызвать SentimentAnalyzer.classify (instance) для прогнозирования непомеченногоданные. См. SentimentAnalyzer.classify .