Récapitulatif - Compteur de fréquence de mots
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 30 sur 68.
Défi
FacileConstruisez un outil d'analyse de texte qui compte la fréquence des mots dans un document. Ce défi démontre comment les maps excellent dans l'agrégation de données en suivant le nombre de fois que chaque mot unique apparaît dans un texte.
Vous recevrez deux entrées :
- Une chaîne de caractères représentant le texte à analyser (par exemple,
"the quick brown fox jumps over the lazy dog the fox is quick") - Une chaîne de caractères représentant le seuil de fréquence minimum (par exemple,
"2")
Important : Le texte d'entrée peut contenir des espaces, vous devez donc lire la ligne complète en utilisant bufio.NewReader avec ReadString('\n') ou un bufio.Scanner — n'utilisez pas fmt.Scanln pour l'entrée de texte, car il s'arrête de lire au premier espace.
Votre tâche consiste à :
- Créer une fonction appelée
countWordsqui prend une chaîne de texte et renvoie unemap[string]intoù :- Les clés sont les mots individuels (chaînes de caractères)
- Les valeurs sont le décompte de la fréquence de chaque mot (entiers)
- Analyser le texte d'entrée en le divisant en mots individuels à l'aide de
strings.Fields(qui divise sur n'importe quel espace blanc) - Compter la fréquence de chaque mot dans le texte :
- Convertir tous les mots en minuscules pour un comptage cohérent
- Pour chaque mot, incrémenter son compteur dans la map
- Si un mot n'existe pas encore dans la map, il commencera à 0 et sera incrémenté à 1
- Filtrer les résultats pour n'afficher que les mots qui apparaissent au moins autant de fois que le seuil
- Afficher les résultats au format suivant :
- En-tête :
"Word Frequency Analysis:" - Pour chaque mot qualifié :
"[word]: [count]" - Afficher les mots par ordre alphabétique
- En-tête :
- Calculer et afficher les statistiques récapitulatives :
"Total unique words: [total_unique_count]""Words above threshold: [filtered_count]""Most frequent word: [word] ([count] times)"
Par exemple, avec le texte d'entrée "hello hello world" et le seuil "2", la sortie devrait être :
Word Frequency Analysis: hello: 2 Total unique words: 2 Words above threshold: 1 Most frequent word: hello (2 times)
Utilisez le package bufio pour lire les lignes complètes d'entrée, le package strings pour diviser le texte et le convertir en minuscules, le package strconv pour convertir la chaîne du seuil en entier, et le package sort pour trier les mots par ordre alphabétique. Ce défi démontre comment les maps offrent une solution élégante pour compter et agréger des données, le comportement de valeur zéro des maps rendant la logique de comptage simple et efficace.
Essayez vous-même
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// Lire la ligne de texte complète (y compris les espaces)
scanner.Scan()
text := scanner.Text()
// Lire la valeur du seuil
scanner.Scan()
thresholdStr := scanner.Text()
// Convertir le seuil en entier
threshold, _ := strconv.Atoi(thresholdStr)
// TODO: Écrivez votre code ci-dessous
// 1. Créer la fonction countWords qui retourne un map[string]int
// Astuce : utilisez strings.Fields et strings.ToLower pour diviser et normaliser les mots
// 2. Utiliser la fonction pour compter les fréquences des mots
// 3. Filtrer les mots qui apparaissent au moins 'threshold' fois
// 4. Trier les mots filtrés par ordre alphabétique et les afficher
// 5. Calculer et afficher les statistiques récapitulatives
_ = text
_ = threshold
fmt.Println("Word Frequency Analysis:")
}Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportements