2016-12-20 9 views
0

Я новичок в Python и бегу nltk.NaiveBayes классификатор на training_set в следующей строке кода:Float не итерацию ошибка nltk.naivebayes классификатором

training_set = apply_features(extract_features, training_tweets) 

training_set является LazyMap и training_tweets список кортежи в следующем формате:

('ليت كل ايام السنة رمضان', 'positive'), где первая часть представляет собой арабский твит, а вторая часть - настроение.

функция extract_features ниже:

def extract_features(document): 
    document_words = set(document) 
    features = {} 
    for word in word_features: 
     features['contains(%s)' % word] = (word in document_words) 
    return features 

Этот код работает на английском твитов. Я не уверен, где я должен искать объект float в моем списке кортежей.

Любая помощь приветствуется. Это дает следующее отслеживающий ...

File "C:/Users/Owner/nb.py", line 64, in <module> 
classifier = NaiveBayesClassifier.train(training_set) 

File "C:\Users\Owner\Anaconda3\lib\site-packages\nltk\classify\naivebayes.py", line 194, in train 
for featureset, label in labeled_featuresets: 

File "C:\Users\Owner\Anaconda3\lib\site-packages\nltk\util.py", line 946, in iterate_from 
try: yield self._func(self._lists[0][index]) 

File "C:\Users\Owner\Anaconda3\lib\site-packages\nltk\classify\util.py", line 65, in lazy_func 
return (feature_func(labeled_token[0]), labeled_token[1]) 

File "C:/Users/Owner/nb.py", line 35, in extract_features 
document_words = set(document) 

TypeError: 'float' object is not iterable 

ответ

1

Исключение происходит от выражения set(document), который предполагает, что document, аргумент extract_features, является итерацию.

Эта функция вызывается в lazy_func с местным именем feature_func с аргументом labeled_token[0]. Таким образом, последний является float, а не iterable.

Вам нужно будет вернуться через код функций в traceback, чтобы узнать, почему. Вы можете захотеть добавить некоторые операторы печати здесь и там, чтобы просмотреть промежуточные значения.