miércoles, 30 de abril de 2008

Quinto Ejercicio

En este ejercicio vamos a contar todas las veces que se repiten las palabras que aparecen en un fichero y vamos a imprimir las 50 palabras más repetidas.

El código del programa es el siguiente:

use File::Slurp;

@ARGV || die "Uso: $0 <fichero para contar palabras>\n";
my $text = read_file( $ARGV[0] ) ;
my @palabras = split(" ",$text);
my %indice;

for(@palabras){
if($_ =~ /^([a-záéíóúñ])+$/){
$indice{$_}=$indice{$_}+1;
}
}

@ordenadas = sort {$indice{$b} cmp $indice{$a}} keys %indice;

for(0..49){
if($_<=$#ordenadas){
print $_+1,": ",$ordenadas[$_]," ... ",$indice{$ordenadas[$_]}," veces\n";
}
}

Primero dividimos el texto en palabras con la función split.
Luego recorremos el array con las palabras y si concuerdan con la expresión regular que define "una palabra en minúsculas" vamos incrementando el valor de un hash en el que tenemos como clave la palabra en sí y como valor el número de veces que se ha repetido.
A continuación ordenamos las palabras por repeticiones e imprimimos las 50 más frecuentes.

No hay comentarios: