AttributeError: getfeature_names не найдены; используя scikit-learn

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
vectorizer = vectorizer.fit(word_data)
freq_term_mat = vectorizer.transform(word_data)

from sklearn.feature_extraction.text import TfidfTransformer

tfidf = TfidfTransformer(norm="l2")
tfidf = tfidf.fit(freq_term_mat)
Ttf_idf_matrix = tfidf.transform(freq_term_mat)

voc_words = Ttf_idf_matrix.getfeature_names()
print "The num of words = ",len(voc_words)

когда я запускаю программу, содержащую этот фрагмент кода, я получаю следующую ошибку:

Отслеживание (последний вызов последним): файл "vectorize_text.py", строка 87, в
voice_words = Ttf_idf_matrix.getfeature_names ()
файле "/home/farheen/anaconda/lib/python2.7/site-> packages / scipy / sparse / base.py ", строка 499, в getattr
поднять AttributeError (attr +" not found ")
AttributeError: get_feature_names не найдены

Пожалуйста, предложите мне решение.


person Farheen Nilofer    schedule 26.07.2015    source источник


Ответы (3)


Я вижу две проблемы с вашим кодом. Во-первых, вы применяете get_feature_names () к выходным данным матрицы, а не к векторизатору. Вам нужно применить его к векторизатору. Во-вторых, вы без надобности разбиваете это на слишком много шагов. Вы можете использовать TfidfVectorizer.fit_transform (), чтобы делать то, что вы хотите, на гораздо меньшем пространстве. Попробуй это:

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer()
transformed = vectorizer.fit_transform(word_data)
print "Num words:", len(vectorizer.get_feature_names())
person user6275647    schedule 01.05.2016

Разве это не get_feature_names(), т.е. с подчеркиванием после "получить".

Кроме того, я не уверен, что вы пытаетесь сделать, но get_feature_names - это метод, действующий только для классов * Vectorizer, а не для TfidTransformer. Может быть, вы хотите вместо этого TfidVectorizer?

person Maelstrom    schedule 26.07.2015
comment
Спасибо, что сообщили об этом. Я сделал опечатку (исправлено в get_feature_names ()), но проблема не в этом. - person Farheen Nilofer; 26.07.2015
comment
Я уже пробовал использовать get_feature_names с классом Vectorizer. См. Код vectorizer = CountVectorizer () `vectorizer = vectorizer.fit (word_data) freq_term_mat = vectorizer.transform (word_data) voice_words = freq_term_mat.get_feature_names ()` Но с той же ошибкой ›AttributeError: get_feature_names not found - person Farheen Nilofer; 26.07.2015
comment
К сожалению, ваш код не показан выше. Пожалуйста, измените / отредактируйте, чтобы вы могли прояснить ошибку. Из ваших комментариев выше не похоже, что вы правильно используете атрибут. Freq_term_mat класса CountVectorizer? Не похоже. - person Maelstrom; 26.07.2015
comment
vectorizer = CountVectorizer () - person Farheen Nilofer; 26.07.2015
comment
vectorizer = vectorizer.fit (word_data) - person Farheen Nilofer; 26.07.2015
comment
freq_term_mat = vectorizer.transform (word_data) - person Farheen Nilofer; 26.07.2015
comment
voice_words = freq_term_mat.get_feature_names () - person Farheen Nilofer; 26.07.2015
comment
Я все еще получаю ту же ошибку ›AttributeError: get_feature_names not found - person Farheen Nilofer; 26.07.2015
comment
Правильно, как я уже сказал, freq_term_mat - это не CountVectorizer, не так ли? Я думаю, вы преобразовали из векторизатора, получив в результате какую-то разреженную матрицу. - person Maelstrom; 26.07.2015

person    schedule
comment
Подумайте о добавлении некоторых пояснений к тому, что делает ваш код и почему он отвечает на вопрос. - person haraldkl; 27.09.2015