Векторизатор TFIDF выдает ошибку

Я пытаюсь выполнить классификацию текста для определенных файлов, используя TFIDF и SVM. Особенности должны быть выбраны по 3 слова за раз. Мои файлы данных уже в формате: ангельские глазки есть, каждый для себя. Нет стоп-слов, и ни один из них не может делать лемминг или стемминг. Я хочу, чтобы эта функция была выбрана как: ангельские глазки... Код, который я написал, приведен ниже:

import os
import sys
import numpy
from sklearn.svm import LinearSVC
from sklearn.metrics import confusion_matrix
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn import metrics
from sklearn.datasets import load_files
from sklearn.cross_validation import train_test_split

dt=load_files('C:/test4',load_content=True)
d= len(dt)
print dt.target_names
X, y = dt.data, dt.target
print y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
print y_train
vectorizer = CountVectorizer()
z= vectorizer.fit_transform(X_train)
tfidf_vect= TfidfVectorizer(lowercase= True, tokenizer=',', max_df=1.0, min_df=1, max_features=None, norm=u'l2', use_idf=True, smooth_idf=True, sublinear_tf=False)


X_train_tfidf = tfidf_vect.fit_transform(z)

print tfidf_vect.get_feature_names()
svm_classifier = LinearSVC().fit(X_train_tfidf, y_train)

К сожалению, я получаю сообщение об ошибке «X_train_tfidf = tfidf_vect.fit_transform(z)»: AttributeError: нижний не найден.
Если я изменю код, чтобы сделать

tfidf_vect= TfidfVectorizer( tokenizer=',', use_idf=True, smooth_idf=True, sublinear_tf=False)
print "okay2"
#X_train_tfidf = tfidf_transformer.fit_transform(z)
X_train_tfidf = tfidf_vect.fit_transform(X_train)
print X_train_tfidf.getfeature_names()

Я получаю сообщение об ошибке: TypeError: объект 'str' не вызывается. Может, кто-нибудь скажет мне, где я ошибаюсь.


person Axe    schedule 23.01.2015    source источник
comment
что произойдет, если вы удалите параметр токенизатора?   -  person JAB    schedule 23.01.2015


Ответы (1)


вход в параметр токенизатора является вызываемым. Попробуйте определить функцию, которая будет правильно токенизировать ваши данные. Если через запятую, то:

def tokens(x):
return x.split(',')

должно сработать.

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect= TfidfVectorizer( tokenizer=tokens ,use_idf=True, smooth_idf=True, sublinear_tf=False)

создать случайную строку, разделенную ,

 a=['cat on the,angel eyes has,blue red angel,one two blue,blue whales eat,hot tin roof']

tfidf_vect.fit_transform(a)
tfidf_vect.get_feature_names()

возвращается

Out[73]:

[u'angel eyes has',
 u'blue red angel',
 u'blue whales eat',
 u'cat on the',
 u'hot tin roof',
 u'one two blue']
person JAB    schedule 23.01.2015
comment
Большое спасибо. Это сработало. Но я не понимаю, почему он не работал, когда я устанавливал токенизатор. спрашиваю просто для познания - person Axe; 23.01.2015
comment
когда вы передавали строку ',' непосредственно токенизатору, он пытался вызвать строку. Вам нужно передать функцию, которая токенизирует данные. Это то, что вы имеете в виду? - person JAB; 23.01.2015