Los datos en Python pueden ser simples (como las cadenas de texto) o compuestos (como las listas, conjuntos y diccionarios). Ya hemos visto que las listas almacenan valores:
mis_canciones = ['The truth will always be', 'A beautiful mess']
Los diccionarios, en cambio, almacenan asociaciones:
mis_canciones = {'The truth will always be':'Pat Metheny', 'A beautiful mess': Jason Mraz}
mis_canciones['Logical song'] = 'Supertramp'
Define la función add_word en el programa siguiente para que el diccionario cuente el número de casos de cada palabra:
def add_word(word, stat):
# Tu implementación
stat = {}
for word in ['en', 'el', 'lugar', 'en', 'el', 'que', 'nos', 'conocimos']:
add_word(word, stat)
print stat
A continuación utiliza una función como la siguiente para procesar las palabras de un fichero y haz que el programa escriba todas las palabras halladas (una palabra por línea, sin distinguir mayúsculas de minúsculas) acompañada, cada una, del número de casos.
import re # Regular expressions define text patterns
def add_file(text_file, stat):
for line in text_file:
for word in re.split('\W+', line): # word = consecutive letters
add_word(word.lower(), stat) # forget uppercase
Finalmente, representa mediante un gráfica en escala logarítmica (por ejemplo, usando pyplot.loglog(x, y, 'b.')) la frecuencia de cada palabra. Las frecuencias deben estar ordenadas de mayor a menor, es decir, dibuja un punto (n,f(n)) por cada palabra donde n es su número de orden cuando se ordenan de mayor a menor frecuencia y f(n) su frecuencia.
Nota: una lista L se puede ordenar con la función predefinida sorted. En particular, si se escribe sorted(L, reverse=True) la ordenación de L se realiza de mayor a menor.
La curva representada es, por tanto, monótonamente decreciente e ilustra la denominada ley de Zipf.