Итоги: счетчик частоты слов
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 30 из 68.
Задание
ЛегкоСоздайте инструмент анализа текста, который подсчитывает частоту слов в документе. Это задание демонстрирует, как карты эффективно агрегируют данные, отслеживая, сколько раз каждое уникальное слово appear в тексте.
Вы получите два входных значения:
- строку, представляющую текст для анализа (например,
"the quick brown fox jumps over the lazy dog the fox is quick") - строку, представляющую минимальный порог частоты (например,
"2")
Важно: Входной текст может содержать пробелы, поэтому необходимо прочитать всю строку с помощью bufio.NewReader и ReadString('\n') или bufio.Scanner: не используйте fmt.Scanln для ввода текста, поскольку он прекращает чтение при первом пробеле.
Ваша задача:
- Создать function с именем
countWords, которая принимает строку текста и возвращаетmap[string]int, где:- ключами являются отдельные слова (строки);
- значениями является количество появлений каждого слова (целые числа).
- Разобрать входной текст, разделив его на отдельные слова с помощью
strings.Fields(эта функция разделяет текст по любым пробельным символам). - Подсчитать частоту каждого слова в тексте:
- преобразовать все слова в нижний регистр для единообразного подсчёта;
- для каждого слова увеличить его количество в карте;
- если слова ещё нет в карте, его начальное значение будет равно 0, после чего оно увеличится до 1.
- Отфильтровать results, чтобы показывать только слова, которые appear не менее указанного порога.
- Вывести результаты в следующем формате:
- заголовок:
"Word Frequency Analysis:" - для каждого подходящего слова:
"[word]: [count]" - выводить слова в alphabetical порядке.
- заголовок:
- Рассчитать и вывести сводную статистику:
"Total unique words: [total_unique_count]""Words above threshold: [filtered_count]""Most frequent word: [word] ([count] times)"- Если несколько слов имеют одинаковое наибольшее количество появлений, вывести то, которое идёт первым в alphabetical порядке. Если каждое слово появляется один раз, это просто первое слово в отсортированном списке.
Например, для входного текста "hello hello world" и порога "2" результатом должен быть:
Word Frequency Analysis: hello: 2 Total unique words: 2 Words above threshold: 1 Most frequent word: hello (2 times)
Используйте пакет bufio для чтения полных строк ввода, пакет strings для разделения текста и преобразования его в нижний регистр, пакет strconv для преобразования строки с порогом в целое число и пакет sort для сортировки слов в alphabetical порядке. Это задание демонстрирует, как карты предоставляют элегантное решение для подсчёта и агрегирования данных, а поведение карт с нулевыми значениями делает логику подсчёта простой и эффективной.
Попробуйте сами
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// Прочитать полную строку текста (включая пробелы)
scanner.Scan()
text := scanner.Text()
// Прочитать значение порога
scanner.Scan()
thresholdStr := scanner.Text()
// Преобразовать threshold в целое число
threshold, _ := strconv.Atoi(thresholdStr)
// TODO: Напишите ваш код ниже
// 1. Создайте функцию countWords, которая возвращает map[string]int
// Подсказка: используйте strings.Fields и strings.ToLower для разделения и нормализации слов
// 2. Use the function to count word frequencies
// 3. Отфильтруйте слова, которые появляются как минимум 'threshold' раз
// 4. Отсортируйте отфильтрованные слова по алфавиту и отобразите их
// 5. Вычислите и отобразите сводную статистику
_ = text
_ = threshold
fmt.Println("Word Frequency Analysis:")
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go