typestar

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

  1. scan visita cada palabra que coincide y alimenta un contador Hash.new(0).
  2. sort_by con [-n, word] ordena por conteo y luego alfabéticamente.
  3. format rellena las columnas para que las barras del histograma queden alineadas.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 2 en Bis; paso 28 de 29 en Fundamentos del lenguaje.

← Anterior Siguiente →