#!/usr/bin/perl -w

#A lei de zipf: tres resultados: 
#zipf1 = K / R , onde K = freq da palavra no ranking 1
#zipf2 = K / R elevado a alfa, onde alfa é próximo a 1
#zipf3 = K / R, onde K = corpus / 10

$alfa=0.9;

$Separador = "[\.\,\;\:\«\»\&\%\+\=\$\(\)\<\>\!\¡\?\¿\\[\\]]" ;
while ($token = <STDIN>) {
     chomp $token;
 
    


     ##contamos os tokens que não são marcas de pontuação:
     if ($token !~ m/$Separador/ ) {
        $contarPals++;
        $contar{$token}++ ;
        #$Denominador += 1 / $contarPals;
     }
    
   

}


if (defined $contarPals) {
print STDERR "Numero de ocurrências de palavras: \n$contarPals\n\n";
}

print "TOKENS\tFREQ\tZipf1\tZipf2\tZipf3\n";

foreach $tokenDiff (sort {$contar{$b} <=>
                      $contar{$a} }
                      keys %contar ) {

    $contarPalsDiferentes++;
    if ($contarPalsDiferentes == 1) {
       $K = $contar{$tokenDiff} ;
    }

    use integer;
    $Zipf1 = $K / $contarPalsDiferentes;
    $Zipf2 = $K / ( $contarPalsDiferentes ** $alfa);
    $Zipf3 = ($contarPals/10) / $contarPalsDiferentes;

    print "$tokenDiff\t$contar{$tokenDiff}\t$Zipf1\t$Zipf2\t$Zipf3\n";
}


if (defined $contarPalsDiferentes) {
   print STDERR "Numero de palavras diferentes: \n$contarPalsDiferentes\n\n";
}

$ratio = ($contarPals / $contarPalsDiferentes) ;

if (defined $ratio) {
   print STDERR "Média da frequência por palavra: \n$ratio\n\n";
}

