vectorizer tfidf sklearn scikit modules learn idf hashingvectorizer python pandas machine-learning scikit-learn tf-idf

python - tfidf - tf idf vectorizer sklearn



TfidfVectorizer en scikit-learn: ValueError: np.nan no es un documento vĂ¡lido (1)

Debe convertir el object dtype en una cadena unicode como se menciona claramente en el rastreo.

x = v.fit_transform(df[''Review''].values.astype(''U'')) ## Even astype(str) would work

Desde la página Doc del vectorizador TFIDF:

fit_transform (raw_documents, y = Ninguno)

Parámetros: raw_documents: iterable
un iterable que produce objetos str , unicode o file

Estoy usando TfidfVectorizer de scikit-learn para realizar una extracción de características a partir de datos de texto. Tengo un archivo CSV con una Puntuación (puede ser +1 o -1) y una Revisión (texto). Metí estos datos en un DataFrame para poder ejecutar el Vectorizer.

Este es mi código:

import pandas as pd import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer df = pd.read_csv("train_new.csv", names = [''Score'', ''Review''], sep='','') # x = df[''Review''] == np.nan # # print x.to_csv(path=''FindNaN.csv'', sep='','', na_rep = ''string'', index=True) # # print df.isnull().values.any() v = TfidfVectorizer(decode_error=''replace'', encoding=''utf-8'') x = v.fit_transform(df[''Review''])

Este es el rastreo del error que recibo:

Traceback (most recent call last): File "/home/PycharmProjects/Review/src/feature_extraction.py", line 16, in <module> x = v.fit_transform(df[''Review'']) File "/home/b/hw1/local/lib/python2.7/site- packages/sklearn/feature_extraction/text.py", line 1305, in fit_transform X = super(TfidfVectorizer, self).fit_transform(raw_documents) File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 817, in fit_transform self.fixed_vocabulary_) File "/home/b/work/local/lib/python2.7/site- packages/sklearn/feature_extraction/text.py", line 752, in _count_vocab for feature in analyze(doc): File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 238, in <lambda> tokenize(preprocess(self.decode(doc))), stop_words) File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 118, in decode raise ValueError("np.nan is an invalid document, expected byte or " ValueError: np.nan is an invalid document, expected byte or unicode string.

Revisé el archivo CSV y el marco de datos para cualquier cosa que se lea como NaN pero no puedo encontrar nada. Hay 18000 filas, ninguna de las cuales devuelve isnan como Verdadero.

Esto es lo que df[''Review''].head() ve así:

0 This book is such a life saver. It has been s... 1 I bought this a few times for my older son and... 2 This is great for basics, but I wish the space... 3 This book is perfect! I''m a first time new mo... 4 During your postpartum stay at the hospital th... Name: Review, dtype: object