typestar

word_freq.pl en Perl

Un reporte de frecuencia de palabras sobre un pasaje incrustado, impulsado por un solo hash.

use strict;
use warnings;

# word_freq: count word occurrences in an inline passage

my $text = <<'TEXT';
The quick brown fox jumps over the lazy dog.
The dog barks; the fox runs. Quick thinking, that fox.
TEXT

my @words = lc($text) =~ /[a-z]+/g;

my %freq;
$freq{$_}++ for @words;

printf "words total: %d\n", scalar @words;
printf "words unique: %d\n", scalar keys %freq;

my @ranked = sort { $freq{$b} <=> $freq{$a} or $a cmp $b } keys %freq;

print "top 5:\n";
for my $word (@ranked[0 .. 4]) {
    printf "  %-8s %d\n", $word, $freq{$word};
}

my @once = sort grep { $freq{$_} == 1 } keys %freq;
print "seen once: ", join(", ", @once), "\n";

Cómo funciona

  1. Una coincidencia en contexto de lista, lc($text) =~ /[a-z]+/g, extrae cada palabra en minúsculas.
  2. $freq{$_}++ for @words construye toda la tabla de frecuencias en una línea.
  3. Un sort de dos claves ordena por conteo y luego alfabéticamente para desempatar.
  4. grep { $freq{$_} == 1 } se queda con las palabras vistas una sola vez.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
642
Tokens
155
Ritmo de tres estrellas
80 tpm

Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 116 segundos.

Escribe este fragmento

Paso 1 de 3 en Bis; paso 25 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →