>>> import collections, re
>>> texts = ['John likes to watch movies. Mary likes too.', 'John also likes to watch football games.']
>>> bagsofwords = [ collections.Counter(re.findall(r'\w+', txt)) for txt in texts]
>>> bagsofwords[0]
Counter({'likes': 2, 'watch': 1, 'Mary': 1, 'movies': 1, 'John': 1, 'to': 1, 'too': 1})
>>> bagsofwords[1]
Counter({'watch': 1, 'games': 1, 'to': 1, 'likes': 1, 'also': 1, 'John': 1, 'football': 1})
>>> sumbags = sum(bagsofwords, collections.Counter())
>>> sumbags
Counter({'likes': 3, 'watch': 2, 'John': 2, 'to': 2, 'games': 1, 'football': 1, 'Mary': 1, 'movies': 1, 'also': 1, 'too': 1})
>>>

Para bagsofwords[0], ¿es posible acceder a la cadena "likes" y su recuento?

-1
Michael Joshua Ramos 14 dic. 2016 a las 11:08
bagsofwords[0]['likes']
 – 
vaultah
14 dic. 2016 a las 11:09
Estaba planeando mostrar bolsas de palabras [0] en un formato más de tabla.
 – 
Michael Joshua Ramos
14 dic. 2016 a las 11:13

1 respuesta

La mejor respuesta

El método más fácil sería,

dictofwords = dict(bagsofwords[0])
for word, count in dictofwords.iteritems():
    print word, count

Salida:
películas 1
ver 1
al 1
me gusta 2
me gusta 2
Juan 1
María 1
también 1

Usar métodos de contador

Puede iterar sobre un contador de la siguiente manera.

for i in bagsofwords[0].elements():
    print i, bagsofwords[0][i]

Salida:
películas 1
ver 1
al 1
me gusta 2
me gusta 2
Juan 1
María 1
también 1

Counter tiene un método incorporado llamado most_common() Utilizando eso, puede obtenerlo en forma ordenada.

for i in bagsofwords[0].most_common():
    print i[0], i[1]

Salida:
me gusta 2
películas 1
ver 1
al 1
Juan 1
María 1
también 1


¡Espero eso ayude! :)

2
bharadhwaj 14 dic. 2016 a las 11:45