0

Я пытаюсь объединить функции типа dict, используемые в NLTK, и функцию SKLEARN tfidf для каждого экземпляра.Комбинирование текстовых функций NLTK с помощью sklearn Векторизованные функции

Пример ввода: экземпляры = [[ "Я работаю с текстовыми данными"], [ "Это мое второе предложение"]] экземпляр = "Я работаю с текстовыми данными"

def generate_features(instance): 
     featureset["suffix"]=tokenize(instance)[-1] 
     featureset["tfidf"]=self.tfidf.transform(instance) 
     return features 

    from sklearn.linear_model import LogisticRegressionCV 
    from nltk.classify.scikitlearn import SklearnClasskifier 
    self.classifier = SklearnClassifier(LogisticRegressionCV()) 
    self.classifier.train(feature_sets) 

Этот tfidf обучается во всех случаях. Но когда я тренирую классификатор nltk с помощью этого набора функций, он выдает следующую ошибку.

self.classifier.train(feature_sets) 
File "/Library/Python/2.7/site-packages/nltk/classify/scikitlearn.py", line 115, in train 
X = self._vectorizer.fit_transform(X) 
File "/Library/Python/2.7/site 
packages/sklearn/feature_extraction/dict_vectorizer.py", line 226, in fit_transform 
return self._transform(X, fitting=True) 
File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/dict_vectorizer.py", line 174, in _transform 
values.append(dtype(v)) 
TypeError: float() argument must be a string or a number 

Я понимаю здесь проблему, что она не может векторизовать уже векторизованные функции. Но есть ли способ исправить это?

+0

просьба предоставить образец данных для воспроизведения вашей проблемы –

ответ

0

Для тех, кто может посетить этот вопрос в будущем, я сделал следующее, что решило проблему.

from sklearn.linear_model import LogisticRegressionCV 
from scipy.sparse import hstack 

def generate_features(instance): 
    featureset["suffix"]=tokenize(instance)[-1] 
    return features 

feature_sets=[(generate_features(instance),label) for instance in instances] 
X = self.vec.fit_transform([item[0] for item in feature_sets]).toarray() 
Y = [item[1] for item in feature_sets] 
tfidf=TfidfVectorizer.fit_transform(instances) 

X=hstack((X,tfidf)) 
classifier=LogisticRegressionCV() 
classifier.fit(X,Y) 
0

Я не знаю, если это поможет или нет. В моем случае значения атрибута ["суффикс"] должны быть строками или цифрами. Например:

featureset [ "суффикс"] = "некоторое значение"