Frecuencia de palabras en Ruby
Un script completo: recorrer texto, contar palabras, imprimir una tabla ordenada.
#!/usr/bin/env ruby
# Cuenta frecuencias de palabras en un corpus pequeño e imprime el top cinco.
TEXT = <<~PROSE
the quick brown fox jumps over the lazy dog
the dog barks and the fox runs
quick thinking wins the day
PROSE
counts = Hash.new(0)
TEXT.scan(/[a-z]+/) { |word| counts[word] += 1 }
widest = counts.keys.map(&:length).max
top = counts.sort_by { |word, n| [-n, word] }.first(5)
top.each do |word, n|
bar = "#" * n
puts format("%-#{widest}s %2d %s", word, n, bar)
end
puts "#{counts.size} distinct words, #{counts.values.sum} total"
Cómo funciona
scanvisita cada palabra que coincide y alimenta un contadorHash.new(0).sort_bycon[-n, word]ordena por conteo y luego alfabéticamente.formatrellena las columnas para que las barras del histograma queden alineadas.
Palabras clave y builtins usados aquí
doendformatputs
El intento, en números
- Líneas
- 21
- Caracteres a escribir
- 545
- Tokens
- 124
- Ritmo de tres estrellas
- 80 tpm
Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 93 segundos.
Paso 1 de 2 en Bis; paso 28 de 29 en Fundamentos del lenguaje.