team-work-it-JohnReed7
Text Analysis System - Variant 7
👥 Участники проекта
Student 1: Specification Engineer
- GitVerse аккаунт: ArturAnv
- Роль: Создание системной спецификации
Student 2: Developer
- GitVerse аккаунт: alexeyumatov
- Роль: Реализация кода на основе спецификации
- Инструменты: GitHub Copilot (Claude Sonnet 4.5)
Student 3: Code Reviewer
- GitVerse аккаунт: JohnReed7
- Роль: Код-ревью и контроль качества
Дополнительно: Я (Student 3) выполнял роль разработчика у ArturAnv.
📋 Описание проекта
Text Analysis System - консольное приложение на C# для анализа текста с расчётом частоты слов, индексацией позиций и поддержкой продвинутых алгоритмов поиска и сортировки.
Основные возможности:
- 📊 Анализ текста с подсчётом частоты слов
- 🔍 Поиск слов с использованием Binary Search
- 📈 Сортировка по частоте с использованием QuickSort
- 📍 Индексация позиций слов (строка и колонка)
- 📉 Статистика: общее количество слов, уникальные слова, средняя длина
🛠️ Технологии и инструменты
- Язык: C# (.NET 6.0+)
- Тип приложения: Console Application
- Парадигма: Object-Oriented Programming (OOP)
- Алгоритмы:
- QuickSort (рекурсивная реализация)
- Binary Search (итеративная реализация)
- IDE: Visual Studio Code + GitHub Copilot
- AI-модель: Claude Sonnet 4.5
📁 Структура репозитория
team-work-it-JohnReed7/
├── README.md # Этот файл
├── CONTRIBUTING.md # Правила совместной разработки
├── prompt.md # Системная спецификация (Student 1)
├── tasks/
│ └── task_variants.md # Варианты заданий
├── dev/
│ ├── solution.cs # Основной код приложения (Student 2)
│ └── TextAnalysisSystem.csproj # Файл проекта .NET
└── demo/
└── [артефакты демонстрации]
💻 Описание кода
Архитектура приложения
1. Position (struct)
Структура для хранения координат слова в тексте:
- номер строкиLineIndex- позиция в строкеColumnIndex
2. WordInfo (class)
Класс для хранения информации о слове:
- слово в нижнем регистреWord- количество вхожденийFrequency- список всех позиций словаPositions- метод добавления новой позицииAddPosition()
3. TextProvider (static class)
Предоставляет образец текста для тестирования:
4. TextAnalyzer (class)
Основной класс-движок анализа текста:
Метод ParseText(string[] lines)
- Разбивает текст на слова
- Удаляет пунктуацию (
). , ! ? ; : - Приводит к нижнему регистру
- Сохраняет позиции каждого слова
Метод GetTopWords(int n)
- Создаёт копию списка слов
- Применяет QuickSort для сортировки по частоте (по убыванию)
- Возвращает топ N слов
- Реализация: Рекурсивный QuickSort с методом Partition
Метод BinarySearchWord(string word)
- Нормализует искомое слово
- Применяет Binary Search на отсортированном по алфавиту списке
- Возвращает
илиWordInfonull - Реализация: Итеративный бинарный поиск
Метод GetStatistics()
- Подсчитывает общее количество слов
- Количество уникальных слов
- Среднюю длину слов
5. Program (class)
Главный класс с консольным меню:
Команды:
- Анализировать текст (загрузить пример или ввести вручную)analyze- Найти слово используя Binary Searchsearch [word]- Показать топ N слов по частоте (QuickSort)top [N]- Показать статистикуstats- Выходexit
🎯 Ключевые особенности реализации
✅ Соответствие требованиям спецификации
-
Ручная реализация 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 или выше
Запуск приложения
Пример использования
Available commands:
analyze - Input text manually or load sample
search [word] - Find a specific word
top [N] - Show top N words by frequency
stats - Show general statistics
exit - Exit the application
Enter command: analyze
Analyze Options:
1. Load sample text
2. Input text manually
Choose option (1 or 2): 1
Sample text loaded and analyzed successfully!
Enter command: top 5
--- Top 5 Words by Frequency ---
Rank Word Frequency
----------------------------------------
1 is 4
2 c# 2
3 sort 2
...
Enter command: search development
--- Search Results for 'development' ---
Word: development
Frequency: 2
Positions:
(Line: 0, Column: 58)
(Line: 2, Column: 0)
📊 Процесс работы над проектом
Этап 1: Спецификация (Student 1)
Время: ~25-30 минут
Результат: Файл с детальным описанием:
- Роль и цель системы
- Структура данных (WordInfo, Position)
- Функциональные требования
- Ограничения и условия
- Критерии приёмки
Этап 2: Разработка (Student 2)
Время: ~35-40 минут
Инструменты: GitHub Copilot (Claude Sonnet 4.5)
Процесс:
- Загрузка спецификации в контекст AI-ассистента
- Генерация структуры классов и методов
- Реализация алгоритмов QuickSort и Binary Search
- Создание консольного меню
- Тестирование на примере данных
Результат: Полностью рабочий код в
Этап 3: Код-ревью (Student 3)
Время: ~15-20 минут
Проверка:
- ✅ Соответствие спецификации: 100%
- ✅ Корректность алгоритмов
- ✅ Обработка ошибок
- ✅ Качество кода
- ✅ Best practices
Статус: APPROVED ✅
🎓 Выводы
Что было изучено:
-
Алгоритмы:
- Реализация QuickSort с нуля
- Реализация Binary Search с нуля
- Понимание временной сложности алгоритмов
-
C# и .NET:
- Работа с структурами и классами
- Обобщённые коллекции (List)
- Консольный ввод/вывод
- Форматирование строк
-
Командная работа:
- Работа по спецификации
- Использование AI-ассистентов для разработки
- Код-ревью процесс
Преимущества AI-ассистированной разработки:
- ⚡ Ускорение написания boilerplate кода
- 🎯 Точное следование спецификации
- 💡 Автоматическая обработка edge cases
- 📚 Применение best practices
Дата завершения: 6 декабря 2025
Версия: 1.0