final_vocab = {'Amazon',
'Big Bazaar',
'Brand Factory',
'Central',
'Cleartrip',
'Dominos',
'Flipkart',
'IRCTC',
'Lenskart',
'Lifestyle',
'MAX',
'MMT',
'More',
'Myntra'}
 
vect = CountVectorizer(vocabulary=final_vocab)
token_df = pd.DataFrame(vect.fit_transform(['Big Bazaar','Brand Factory']).todense(), columns=vect.get_feature_names())

enter image description here

¿Por qué toda la salida es cero? para Big Bazaar y los valores de fábrica de la marca deberían ser 1 ???

0
qaiser 27 nov. 2021 a las 11:07

1 respuesta

La mejor respuesta

A tu CountVectorizer le faltan 2 cosas:

  1. ngram_range=(2,2) como se indica en los documentos: All values of n such such that min_n <= n <= max_n will be used. Esto ayuda a CountVectorizer a obtener un vector de 2 gramos de la entrada (Big Bazaar en lugar de ['Big','Bazaar'])
  2. lowercase=False que significa: Convert all characters to lowercase before tokenizing. Esto hará que Big Bazaar y Brand Factory se vuelvan minúsculas y, por lo tanto, no se puedan encontrar en el vocabulario. Establecer en False evitará que eso suceda.

Además, debido a que proporcionó un vocabulario para CountVectorizer, use transform en lugar de fit_transform

from sklearn.feature_extraction.text import CountVectorizer

final_vocab = ['Amazon',
'Big Bazaar',
'Brand Factory',
'Central',
'Cleartrip',
'Dominos',
'Flipkart',
'IRCTC',
'Lenskart',
'Lifestyle',
'MAX',
'MMT',
'More',
'Myntra']
 
vect = CountVectorizer(vocabulary=final_vocab, ngram_range=(2, 2), lowercase=False)
token_df = pd.DataFrame(vect.transform(['Big Bazaar','Brand Factory']).todense(), columns=vect.get_feature_names())
1
manaclan 27 nov. 2021 a las 12:47