team-work-it-alisa_boules
Анализ текстовых данных (частота слов, индексация)
👥 Участники проекта
Student 1: Specification Engineer
- GitVerse аккаунт: @alisa_boules (https://gitverse.ru/alisa_boules)
- Роль: Создание системной спецификации
Student 2: Developer
- GitVerse аккаунт: @penguinqq (https://gitverse.ru/penguinqq)
- Роль: Реализация кода на основе спецификации
- Инструменты: Perplexity AI
Student 3: Code Reviewer
- GitVerse аккаунт: @JohnReed7 (https://gitverse.ru/JohnReed7)
- Роль: Код-ревью и контроль качества
Я выполняла роль разработчика у Student2 (@penguinqq (https://gitverse.ru/penguinqq))
📋 Описание проекта
Проект реализует систему анализа текста, которая:
✔ принимает ввод текста от пользователя;
✔ определяет частоту встречаемости слов;
✔ строит индекс слов с позициями (строка, колонка);
✔ позволяет искать слово бинарным поиском;
✔ выводит статистику по тексту;
✔ показывает топ слов по частоте;
✔ сохраняет индекс в текстовый файл.
🛠️ Технологии и инструменты
- Язык: C# (.NET 6.0+)
- Тип приложения: Console Application
- Парадигма: Object-Oriented Programming (OOP)
- Алгоритмы:
- QuickSort (рекурсивная реализация)
- Binary Search (итеративная реализация)
- IDE: Perplexity AI + VS Code
- AI-модель: Perplexity AI
🔧 Функциональные возможности
🔍 1. Анализ текста
-
Чтение текста с консоли или загрузка образцового текста.
-
Разбор строки на слова (поддерживается русский, английский, числа, C#-идентификаторы).
-
Учет регистра → всё переводится в нижний.
-
Сохранение позиции каждого слова.
📊 2. Частотный анализ
-
Подсчёт количества вхождений каждого слова.
-
Хранение статистики:
-
общее количество слов,
-
количество уникальных слов,
-
средняя длина слова.
-
📌 3. Индексация
Для каждого слова сохраняются:
(line, column)
пример:
hello → (1,1), (2,1), (3,14)
⚡ 4. QuickSort по частоте
Алгоритм реализован вручную, без LINQ и встроенных сортировок.
🔎 5. Бинарный поиск слова
По отсортированному списку слов (по алфавиту).
💾 6. Сохранение индекса в файл
В формате:
word: (line,column), (line,column)
🖥️ 7. Удобное меню команд
Поддерживаемые команды:
analyze
search [word]
top [N]
stats
save [file]
exit
🧱 Архитектура и реализованные классы
В проекте реализованы три ключевых класса:
📌 Класс Word
Хранит информацию об одном слове:
| Поле | Тип | Описание |
|---|---|---|
| string | слово в нижнем регистре |
| int | частота |
| List<(int Line, int Column)> | позиции слова |
Методы:
-
AddPosition(line, column) — добавляет координату слова.
-
ToString() — отладочный вывод.
📌 Класс TextAnalyzer
Основной класс, выполняющий анализ текста.
Основные поля:
| Поле | Тип | Описание |
|---|---|---|
| Dictionary<string, Word> | словарь уникальных слов |
| List | алфавитно отсортированный список |
| int | общее число слов |
| int | количество уникальных слов |
Основные методы:
✔
Разбор текста построчно:
-
извлечение слов через Regex,
-
подсчёт частоты,
-
индексирование.
✔
Возвращает топ-N слов после сортировки QuickSort.
✔
Быстрый поиск слова по алфавиту (O(log n)).
✔
Возвращает:
-
всего слов,
-
уникальных,
-
среднюю длину слова.
✔
Сохраняет индекс в файл.
📌 Класс Program
Реализует консольное меню и логику команд:
-
обработка команд;
-
вывод подсказок;
-
взаимодействие с TextAnalyzer.
🔍 Описание алгоритмов
- Разбор текста — O(n)
С использованием регулярного выражения:
[а-яА-ЯёЁa-zA-Z0-9#]+
- Индексация слов — O(n)
Каждое слово преобразуется в:
Dictionary<string, Word>
- QuickSort — O(n log n)
Используется собственная реализация:
-
сортировка по убыванию частоты слова;
-
без встроенных сортировок.
- Бинарный поиск — O(log n)
Работает по полю Text.
🎮 Команды консольного интерфейса
| Команда | Описание |
|---|---|
| Анализ текста: образец или ввод вручную |
| Поиск слова |
| Топ-N слов по частоте |
| Вывод общей статистики |
| Сохранение индекса в файл |
| Выход |
🧪 Примеры работы
▶ Пример: analyze
Введите строки текста...
END
📄 Образец текста:
C# это мощный язык...
✅ Текст успешно проанализирован!
▶ top 5
📊 Топ 5 слов по частоте
─────────────────────────────────────
Место Слово Частота
1 c# 3
2 разработка 2
...
▶ search hello
🔍 Результаты поиска для 'hello':
Слово: hello
Частота: 3
Позиции:
• (1,1)
• (2,1)
• (3,14)
▶ stats
Всего слов: 42
Уникальных слов: 18
Средняя длина слова: 4.27
▶ save index.txt
💾 Индекс сохранён в: /user/project/index.txt
⚡ Производительность
| Операция | Сложность |
|---|---|
| Анализ текста | O(n) |
| Индексация | O(n) |
| QuickSort | O(n log n) (среднее) |
| Бинарный поиск | O(log n) |
| Память | Линейная — O(n) |
Система масштабируется до больших текстов (до миллиона слов).
📁 Структура репозитория
team-work-it-alisa_boules/
│
├── .gitverse/
│ └── workflows/
│ ├── init.yml
│ └── smartclass.yml
│
├── demo/
│ ├── screenshot1.png
│ └── screenshot2.png
│
├── dev/
│ └── solution.cs
│
├── spec/
│ ├── PRD.md
│ ├── codex.md
│ ├── docs.md
│ └── tasks.md
│
├── tasks/
│ └── task_variants.md
│
├── CONTRIBUTING.md
└── README.md
🎯 Ключевые особенности реализации
✅ Соответствие требованиям спецификации
-
Ручная реализация QuickSort
- Рекурсивный алгоритм с методом разделения (Partition)
- Сортировка по убыванию частоты
- Временная сложность: O(n log n) в среднем
-
Ручная реализация Binary Search
- Итеративный подход
- Работает на отсортированном по алфавиту списке
- Временная сложность: O(log n)
-
Запрещённые операции НЕ используются:
- ❌
для сортировки по частотеList.Sort() - ❌
для топ NEnumerable.OrderBy() - ❌
для поиска словList.Find() - ❌
для поискаDictionary.ContainsKey()
- ❌
-
Разрешённое использование LINQ:
- ✅
- для поиска в процессе парсингаFirstOrDefault() - ✅
- для проекции данныхSelect() - ✅
- для подсчёта средней длиныAverage()
- ✅
🔧 Обработка граничных случаев
- Множественные пробелы между словами
- Текст, начинающийся/заканчивающийся пунктуацией
- Поиск несуществующего слова
- Пустой ввод текста
- Некорректные параметры команд
🚀 Как запустить
Требования
- .NET 6.0 SDK или выше
Запуск приложения
Пример использования
🟦 Старт программы
После запуска:
═══════════════════════════════════════════════════════════
🔍 Система анализа текста (Вариант 7)
═══════════════════════════════════════════════════════════
Доступные команды:
analyze - Ввести текст вручную или загрузить образец
search [слово] - Найти конкретное слово
top [N] - Показать топ N слов по частоте
stats - Показать общую статистику
save [файл] - Сохранить индекс слов в файл
exit - Выход из приложения
▶ Введите команду:
🟩 Пример 1 — analyze
Команда:
analyze
Выбираем загрузку образца:
📋 Опции анализа:
1. Загрузить образец текста
2. Ввести текст вручную
Выберите (1 или 2): 1
Результат:
✅ Образец текста загружен и проанализирован успешно!
📄 Образец текста:
C# это мощный язык. Он популярен для веб и игровой разработки.
Алгоритм сортировки необходим. Быстрая сортировка быстра. Бинарный поиск эффективен.
Разработка на C# требует понимания структур.
🟩 Пример 2 — search
Команда:
search c#
Вывод:
🔍 Результаты поиска для 'c#':
Слово: c#
Частота: 2
Позиции:
• (0,0)
• (2,12)
Если слово не найдено:
search python
❌ Слово 'python' не найдено в проанализированном тексте.
🟩 Пример 3 — top N
Команда:
top 5
Вывод:
📊 Топ 5 слов по частоте
─────────────────────────────────────
Место Слово Частота
─────────────────────────────────────
1 сортировка 2
2 c# 2
3 быстра 1
4 бинарный 1
5 эффективен 1
🟩 Пример 4 — stats
Команда:
stats
Вывод:
📈 Статистика
─────────────────────────────────────
Всего слов: 32
Уникальных слов: 24
Средняя длина слова: 5.12
🟩 Пример 5 — save
Команда:
save index.txt
Результат:
💾 Индекс сохранён в: C:\Projects\TextAnalysisSystem\index.txt
Содержимое файла:
алгоритм: (1,0)
быстрая: (1,23)
быстра: (1,33)
...
Если файл не указан:
save
Сохранится как index.txt по умолчанию.
📊 Процесс работы над проектом
Этап 1: Спецификация (Student 1)
Время: ~25-30 минут
Результат: Файл с детальным описанием:
- Роль и цель системы
- Структура данных (WordInfo, Position)
- Функциональные требования
- Ограничения и условия
- Критерии приёмки
Этап 2: Разработка (Student 2)
Время: ~35-40 минут
Инструменты: Perplexity AI
Процесс:
- Загрузка спецификации в контекст AI-ассистента
- Генерация структуры классов и методов
- Реализация алгоритмов QuickSort и Binary Search
- Создание консольного меню
- Тестирование на примере данных
Результат: Полностью рабочий код в
Этап 3: Код-ревью (Student 3)
Время: ~15-20 минут
Проверка:
- ✅ Соответствие спецификации: 100%
- ✅ Корректность алгоритмов
- ✅ Обработка ошибок
- ✅ Качество кода
- ✅ Best practices
Статус: APPROVED ✅
✔ Заключение
Данный проект реализует:
-
полный анализ текста,
-
частотный словарь,
-
индекс позиций слов,
-
сортировку по частоте (QuickSort),
-
бинарный поиск,
-
удобный интерфейс команд.