Listas agrupadas: contar palabras

Neste apartado afondaremos nalgunhas das operacións que se poden facer sobre unha lista, empregando métodos novos para separar cadeas, contalas, unir listas... Empregamos para iso un exercicio interesante:  contar a frecuencia de palabras dun texto (a iso adicanse algúns lingüistas especializados no uso de algoritmos aplicados á lingua). Para textos longos, como un novela, é fundamental ter un algoritmo de conteo e, de feito, os procesadores de texto adoitan ter diversas funcións ao respecto.

Collamos un texto de referencia, coma por exemplo o noso himno, Os Pinos, nas dúas primeiras estrofas (e na versión de 1984):

Que din os rumorosos

na costa verdecente,

ao raio transparente

do prácido luar?

Que din as altas copas

de escuro arume arpado

co seu ben compasado

monótono fungar?

 

Pasos para analizar frecuencias Código Resultados: print()
Introducir os versos nunha cadea. cadeaPalabras = 'Que din os rumorosos na costa verdecente , ao raio transparente do prácido luar ?'

print (cadeaPalabras)

Que din os rumorosos na costa verdecente , ao raio transparente do prácido luar ?

Engadir máis versos cadeaPalabras += 'Que din as altas copas de escuro arume arpado co seu ben compasado monótono fungar ?'

print (cadeaPalabras)

Que din os rumorosos na costa verdecente , ao raio transparente do prácido luar ? Que din as altas copas de escuro arume arpado co seu ben compasado monótono fungar ?

Separar as palabras e gardalas nunha lista mediante o método split() listaPalabras = cadeaPalabras.split()

print (listaPalabras)

['Que', 'din', 'os', 'rumorosos', 'na', 'costa', 'verdecente', ',', 'ao', 'raio', 'transparente', 'do', 'prácido', 'luar', '?', 'Que', 'din', 'as', 'altas', 'copas', 'de', 'escuro', 'arume', 'arpado', 'co', 'seu', 'ben', 'compasado', 'monótono', 'fungar', '?']

Contamos cantas veces se repite unha palabra en toda a lista co método count() listaPalabras.count('Que')

print (listaPalabras.count ('Que')

2

Contamos cantas veces se repite cada palabra da lista, creando unha nova lista para gardar eses datos e empregando o método append() frecuenciaPalab = []
for i in listaPalabras:
    frecuenciaPalab.append(listaPalabras.count(i))

print (frecuenciaPalab)

[2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]

Agrupamos nunha lista as palabras coa súa frecuencia, empregando o método zip

Frecuencias= list(zip(listaPalabras, frecuenciaPalab))

print (Frecuencias)

[('Que', 2), ('din', 2), ('os', 1), ('rumorosos', 1), ('na', 1), ('costa', 1), ('verdecente', 1), (',', 1), ('ao', 1), ('raio', 1), ('transparente', 1), ('do', 1), ('prácido', 1), ('luar', 1), ('?', 2), ('Que', 2), ('din', 2), ('as', 1), ('altas', 1), ('copas', 1), ('de', 1), ('escuro', 1), ('arume', 1), ('arpado', 1), ('co', 1), ('seu', 1), ('ben', 1), ('compasado', 1), ('monótono', 1), ('fungar', 1), ('?', 2)]

 

Exercicio:

  1. Como farías para ver as palabras en orde alfabética?
  2. Como farías para ver só as palabras que aparecen dúas veces ou máis?
  3. Engade máis estrofas e observa a diferencia no resultado

[Repl.it: Contar a frecuencia de letras texto]

Listas agrupadas: contar palabras O xogo de codificar/decodificar