Resumen - Contador de frecuencia de palabras
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 30 de 68.
Desafío
FácilCrea una herramienta de análisis de texto que cuente las frecuencias de las palabras en un documento. Este desafío demuestra cómo los mapas sobresalen en la agregación de datos al rastrear cuántas veces aparece cada palabra única en un fragmento de texto.
Recibirás dos entradas:
- Una cadena que representa el texto a analizar (por ejemplo,
"the quick brown fox jumps over the lazy dog the fox is quick") - Una cadena que representa el umbral de frecuencia mínima (por ejemplo,
"2")
Importante: El texto de entrada puede contener espacios, por lo que debes leer la línea completa usando bufio.NewReader con ReadString('\n') o un bufio.Scanner — no uses fmt.Scanln para la entrada de texto, ya que deja de leer en el primer espacio.
Tu tarea es:
- Crear una función llamada
countWordsque reciba una cadena de texto y devuelva unmap[string]intdonde:- Las claves son palabras individuales (cadenas)
- Los valores son el recuento de frecuencia de cada palabra (enteros)
- Analizar el texto de entrada dividiéndolo en palabras individuales usando
strings.Fields(que divide por cualquier espacio en blanco) - Contar la frecuencia de cada palabra en el texto:
- Convierte todas las palabras a minúsculas para un conteo consistente
- Para cada palabra, incrementa su recuento en el mapa
- Si una palabra aún no existe en el mapa, comenzará en 0 y se incrementará a 1
- Filtrar los resultados para mostrar solo las palabras que aparecen al menos tantas veces como el umbral
- Mostrar los resultados en el siguiente formato:
- Encabezado:
"Word Frequency Analysis:" - Para cada palabra que califique:
"[word]: [count]" - Mostrar las palabras en orden alfabético
- Encabezado:
- Calcular y mostrar estadísticas de resumen:
"Total unique words: [total_unique_count]""Words above threshold: [filtered_count]""Most frequent word: [word] ([count] times)"
Por ejemplo, dado el texto de entrada "hello hello world" y el umbral "2", la salida debería ser:
Word Frequency Analysis: hello: 2 Total unique words: 2 Words above threshold: 1 Most frequent word: hello (2 times)
Usa el paquete bufio para leer líneas completas de entrada, el paquete strings para dividir el texto y convertirlo a minúsculas, el paquete strconv para convertir la cadena del umbral en un entero, y el paquete sort para ordenar las palabras alfabéticamente. Este desafío demuestra cómo los mapas proporcionan una solución elegante para contar y agregar datos, con el comportamiento de valor cero de los mapas haciendo que la lógica de conteo sea simple y eficiente.
Pruébalo tú mismo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// Leer la línea completa de texto (incluyendo espacios)
scanner.Scan()
text := scanner.Text()
// Leer el valor del umbral
scanner.Scan()
thresholdStr := scanner.Text()
// Convertir el umbral a entero
threshold, _ := strconv.Atoi(thresholdStr)
// TODO: Escribe tu código a continuación
// 1. Crea la función countWords que devuelva un map[string]int
// Pista: usa strings.Fields y strings.ToLower para dividir y normalizar las palabras
// 2. Usa la función para contar las frecuencias de las palabras
// 3. Filtra las palabras que aparecen al menos 'threshold' veces
// 4. Ordena las palabras filtradas alfabéticamente y muéstralas
// 5. Calcula y muestra las estadísticas de resumen
_ = text
_ = threshold
fmt.Println("Word Frequency Analysis:")
}Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos