RompeRatones
Registrado: 20 Sep 2005 Mensajes: 62
| Publicado: 13/10/2006 5:51 am | | | Título: Tabla de frecuencias (solucion en python) |
| La solucion en python del problema planteado en http://www.elrincondelc.com/portal/modules.php?name=Forums&file=viewtopic&t=7625
tomando como como que el archivo que vamos a analizar: el "social contract" de debian ( formato txt: )
con el siguiente programa
| Código: | #!/usr/bin/env python # -*- coding: UTF-8 -*-
#abrimos archivo f=open("social-contract.txt","r")
#vector de control control=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z']
#creo un diccionario para indexar cada letra con su contador contadores={}
#acumula el total de caracteres total=0
#inicializamos los contadores del diccionario en 0 for i in control: contadores[i]=0
#leemos el archivo for i in f.read(): total+=1 #por cada letra que leemos, nos preguntamos si esta tambien dentro de la vector control if i in control: #si efectivamente coincide aumentamos en 1 su contador contadores[i]=contadores[i]+1
# imprimimos resultado print "Texto con %d caracteres en total" % total for letra, contador in contadores.items(): print "%s aparecio %d veces, Frequencia : %.4f" % (letra, contador, (float(contador)/total) )
|
Para finalmente obtener lo siguiente
El programa solo verifica caracteres dentro abecedario español, no controla si hay simbolos especiales, espacios, signos de puntuacion o numeros) pero si los cuenta para sacar el total de caracteres
Para cumplir con la consigna de escribir los resultados en otro fichero, le hacemos una leve modificacion
| Código: | #!/usr/bin/env python # -*- coding: UTF-8 -*-
#abrimos archivo f=open("social-contract.txt","r")
#vector de control control=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','ñ','o','p','q','r','s','t','u','v','w','x','y','z']
#creo un diccionario para indexar cada letra con su contador contadores={}
#acumula el total de caracteres total=0
#inicializamos los contadores del diccionario en 0 for i in control: contadores[i]=0
#leemos el archivo for i in f.read(): total+=1 #por cada letra que leemos, nos preguntamos si esta tambien dentro de la vector control if i in control: #si efectivamente coincide aumentamos en 1 su contador contadores[i]=contadores[i]+1
# imprimimos resultado f=open("frequencias.txt","w")
f.write("Texto con %d caracteres en total\n" % total) for letra, contador in contadores.items(): f.write("%s aparecio %d veces, Frequencia : %.4f\n" % (letra, contador, (float(contador)/total) ))
f.close()
|
_________________
|
|