Tengo la columna 'revisión' del marco de datos con contenido como 'Food was Awesome' y quiero una nueva columna que cuente el número de repeticiones de cada palabra.

name      The First Years Massaging Action Teether
review                    A favorite in our house!
rating                                           5
Name: 269, dtype: object

Esperando resultados como ['Food': 1, 'was': 1, 'Awesome': 1] Lo intenté con for loop pero está tardando demasiado en ejecutarse

for row in range(products.shape[0]):
try:        
    count_vect.fit_transform([products['review_without_punctuation'][row]])
    products['word_count'][row]=count_vect.vocabulary_
except:
    print(row)

Me gustaría hacerlo sin for loop.

0
Akshay 19 jul. 2020 a las 18:25

2 respuestas

La mejor respuesta

Encontré una solución para esto. He definido una función como esta:

def Vectorize(text):
try:
    count_vect.fit_transform([text])
    return count_vect.vocabulary_
except:
    return-1

Y aplicado la función anterior

from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
products['word_count'] = products['review_without_punctuation'].apply(Vectorize)

Esta solución funcionó y obtuve vocabulario en una nueva columna.

0
Akshay 20 jul. 2020 a las 06:08

Puede obtener el vector de conteo para todos los documentos como este:

cv = CountVectorizer()
count_vectors = cv.fit_transform(products['review_without_punctuation'])

Para obtener el vector de recuento en formato de matriz para un documento en particular por índice, por ejemplo, el primer documento,

count_vectors[0].toarray()

El vocabulario está en

cv.vocabulary_

Para obtener las palabras que componen un vector de conteo, por ejemplo, para el primer documento, use

cv.inverse_transform(count_vectors[0])
0
Balaji Ambresh 19 jul. 2020 a las 17:09