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 montre comment les maps excellent dans l’agrégation de données en indiquant combien de fois chaque mot unique apparaît dans un texte.
Vous recevrez deux entrées :
- Une chaîne représentant le texte à analyser (par exemple,
"the quick brown fox jumps over the lazy dog the fox is quick") - Une chaîne représentant le seuil de fréquence minimal (par exemple,
"2")
Important : Le texte d’entrée peut contenir des espaces ; vous devez donc lire la ligne complète à l’aide de bufio.NewReader avec ReadString('\n') ou d’un bufio.Scanner : n’utilisez pas fmt.Scanln pour l’entrée de texte, car cette fonction s’arrête 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)
- Les valeurs sont le nombre d’occurrences de chaque mot (entiers)
- Analyser le texte d’entrée en le divisant en mots individuels à l’aide de
strings.Fields(qui divise selon tout espace blanc) - Compter la fréquence de chaque mot dans le texte :
- Convertir tous les mots en minuscules pour garantir un comptage cohérent
- Pour chaque mot, incrémenter son compteur dans la map
- Si un mot n’existe pas encore dans la map, sa valeur commence à 0 et est incrémentée à 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 correspondant au critère :
"[word]: [count]" - Afficher les mots dans l’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)"- Lorsque plusieurs mots ont le même nombre maximal d’occurrences, afficher celui qui vient en premier dans l’ordre alphabétique. Lorsque chaque mot apparaît une fois, il s’agit simplement du premier mot de la liste triée.
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 paquet bufio pour lire les lignes complètes de l’entrée, le paquet strings pour diviser le texte et le convertir en minuscules, le paquet strconv pour convertir la chaîne du seuil en entier, et le paquet sort pour trier les mots dans l’ordre alphabétique. Ce défi montre comment les maps offrent une solution élégante pour compter et agréger des données, le comportement de valeur nulle 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 complète de texte (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éez la fonction countWords qui retourne un map[string]int
// Astuce : utilisez strings.Fields et strings.ToLower pour diviser et normaliser les mots
// 2. Use the function to count word frequencies
// 3. Filtrez les mots qui apparaissent au moins 'threshold' fois
// 4. Triez les mots filtrés par ordre alphabétique et affichez-les
// 5. Calculez et affichez 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 comportementsEntraînez-vous par vous-même : Compilateur Go en ligne