Recapitulação - Contador de Frequência de Palavras
Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 30 de 68.
Desafio
FácilCrie uma ferramenta de análise de texto que conte a frequência das palavras em um documento. Este desafio demonstra como os mapas são excelentes para agregar dados, rastreando quantas vezes cada palavra única aparece em um trecho de texto.
Você receberá duas entradas:
- Uma string representando o texto a ser analisado (ex:
"the quick brown fox jumps over the lazy dog the fox is quick") - Uma string representando o limite mínimo de frequência (ex:
"2")
Importante: O texto de entrada pode conter espaços, portanto você deve ler a linha completa usando bufio.NewReader com ReadString('\n') ou um bufio.Scanner — não use fmt.Scanln para a entrada de texto, pois ele para a leitura no primeiro espaço.
Sua tarefa é:
- Criar uma função chamada
countWordsque recebe uma string de texto e retorna ummap[string]intonde:- As chaves são palavras individuais (strings)
- Os valores são a contagem de frequência de cada palavra (inteiros)
- Analisar o texto de entrada dividindo-o em palavras individuais usando
strings.Fields(que divide em qualquer espaço em branco) - Contar a frequência de cada palavra no texto:
- Converta todas as palavras para minúsculas para uma contagem consistente
- Para cada palavra, incremente sua contagem no mapa
- Se uma palavra ainda não existir no mapa, ela começará em 0 e será incrementada para 1
- Filtrar os resultados para mostrar apenas as palavras que aparecem pelo menos o número de vezes definido pelo limite (threshold)
- Exibir os resultados no seguinte formato:
- Cabeçalho:
"Word Frequency Analysis:" - Para cada palavra qualificada:
"[word]: [count]" - Exibir as palavras em ordem alfabética
- Cabeçalho:
- Calcular e exibir estatísticas de resumo:
"Total unique words: [total_unique_count]""Words above threshold: [filtered_count]""Most frequent word: [word] ([count] times)"
Por exemplo, dado o texto de entrada "hello hello world" e o limite "2", a saída deve ser:
Word Frequency Analysis: hello: 2 Total unique words: 2 Words above threshold: 1 Most frequent word: hello (2 times)
Use o pacote bufio para ler linhas completas de entrada, o pacote strings para dividir o texto e converter para minúsculas, o pacote strconv para converter a string do limite em um inteiro, e o pacote sort para ordenar as palavras alfabeticamente. Este desafio demonstra como os mapas fornecem uma solução elegante para contagem e agregação de dados, com o comportamento de valor zero (zero-value) dos mapas tornando a lógica de contagem simples e eficiente.
Experimente você mesmo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// Leia a linha completa de texto (incluindo espaços)
scanner.Scan()
text := scanner.Text()
// Leia o valor do limite (threshold)
scanner.Scan()
thresholdStr := scanner.Text()
// Converta o limite para inteiro
threshold, _ := strconv.Atoi(thresholdStr)
// TODO: Escreva seu código abaixo
// 1. Crie a função countWords que retorna um map[string]int
// Dica: use strings.Fields e strings.ToLower para dividir e normalizar as palavras
// 2. Use a função para contar as frequências das palavras
// 3. Filtre as palavras que aparecem pelo menos 'threshold' vezes
// 4. Ordene as palavras filtradas em ordem alfabética e exiba-as
// 5. Calcule e exiba as estatísticas de resumo
_ = text
_ = threshold
fmt.Println("Word Frequency Analysis:")
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e Comportamentos