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 exclusiva aparece em um trecho de texto.
Você receberá duas entradas:
- Uma string que representa o texto a ser analisado (por exemplo,
"the quick brown fox jumps over the lazy dog the fox is quick") - Uma string que representa o limite mínimo de frequência (por exemplo,
"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 de ler no primeiro espaço.
Sua tarefa é:
- Crie uma função chamada
countWordsque recebe uma string de texto e retorna ummap[string]intem que:- As chaves são palavras individuais (strings)
- Os valores são a contagem de frequência de cada palavra (inteiros)
- Analise o texto de entrada dividindo-o em palavras individuais usando
strings.Fields(que divide em qualquer espaço em branco) - Conte a frequência de cada palavra no texto:
- Converta todas as palavras para minúsculas para obter 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
- Filtre os resultados para mostrar somente as palavras que aparecem pelo menos tantas vezes quanto o limite
- Exiba os resultados no seguinte formato:
- Cabeçalho:
"Word Frequency Analysis:" - Para cada palavra qualificada:
"[word]: [count]" - Exiba as palavras em ordem alfabética
- Cabeçalho:
- Calcule e exiba as estatísticas resumidas:
"Total unique words: [total_unique_count]""Words above threshold: [filtered_count]""Most frequent word: [word] ([count] times)"- Quando várias palavras tiverem a mesma contagem mais alta, informe aquela que aparece primeiro em ordem alfabética. Quando cada palavra aparecer uma vez, essa será simplesmente a primeira palavra da lista ordenada.
Por exemplo, considerando o texto de entrada "hello hello world" e o limite "2", a saída deverá 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 convertê-lo 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 oferecem uma solução elegante para contar e agregar dados, com o comportamento de valor zero 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 limiar
scanner.Scan()
thresholdStr := scanner.Text()
// Converta o limiar 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 the function to count word frequencies
// 3. Filtre as palavras que aparecem pelo menos 'threshold' vezes
// 4. Ordene as palavras filtradas alfabeticamente e as exiba
// 5. Calcule e exiba as estatísticas resumidas
_ = 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 ComportamentosPratique por conta própria: Compilador de Go online