team-work-it-JohnReed7

0
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
4 месяца назад
README.md

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 на отсортированном по алфавиту списке
  • Возвращает
    WordInfo
    или
    null
  • Реализация: Итеративный бинарный поиск
Метод
GetStatistics()
  • Подсчитывает общее количество слов
  • Количество уникальных слов
  • Среднюю длину слов

5. Program (class)

Главный класс с консольным меню:

Команды:

  • analyze
    - Анализировать текст (загрузить пример или ввести вручную)
  • search [word]
    - Найти слово используя Binary Search
  • top [N]
    - Показать топ N слов по частоте (QuickSort)
  • stats
    - Показать статистику
  • exit
    - Выход

🎯 Ключевые особенности реализации

✅ Соответствие требованиям спецификации

  1. Ручная реализация QuickSort

    • Рекурсивный алгоритм с методом разделения (Partition)
    • Сортировка по убыванию частоты
    • Временная сложность: O(n log n) в среднем
  2. Ручная реализация Binary Search

    • Итеративный подход
    • Работает на отсортированном по алфавиту списке
    • Временная сложность: O(log n)
  3. Запрещённые операции НЕ используются:

    • List.Sort()
      для сортировки по частоте
    • Enumerable.OrderBy()
      для топ N
    • List.Find()
      для поиска слов
    • Dictionary.ContainsKey()
      для поиска
  4. Разрешённое использование 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 минут
Результат: Файл

prompt.md
с детальным описанием:

  • Роль и цель системы
  • Структура данных (WordInfo, Position)
  • Функциональные требования
  • Ограничения и условия
  • Критерии приёмки

Этап 2: Разработка (Student 2)

Время: ~35-40 минут
Инструменты: GitHub Copilot (Claude Sonnet 4.5)
Процесс:

  1. Загрузка спецификации в контекст AI-ассистента
  2. Генерация структуры классов и методов
  3. Реализация алгоритмов QuickSort и Binary Search
  4. Создание консольного меню
  5. Тестирование на примере данных

Результат: Полностью рабочий код в

dev/solution.cs

Этап 3: Код-ревью (Student 3)

Время: ~15-20 минут
Проверка:

  • ✅ Соответствие спецификации: 100%
  • ✅ Корректность алгоритмов
  • ✅ Обработка ошибок
  • ✅ Качество кода
  • ✅ Best practices

Статус: APPROVED ✅


🎓 Выводы

Что было изучено:

  1. Алгоритмы:

    • Реализация QuickSort с нуля
    • Реализация Binary Search с нуля
    • Понимание временной сложности алгоритмов
  2. C# и .NET:

    • Работа с структурами и классами
    • Обобщённые коллекции (List)
    • Консольный ввод/вывод
    • Форматирование строк
  3. Командная работа:

    • Работа по спецификации
    • Использование AI-ассистентов для разработки
    • Код-ревью процесс

Преимущества AI-ассистированной разработки:

  • ⚡ Ускорение написания boilerplate кода
  • 🎯 Точное следование спецификации
  • 💡 Автоматическая обработка edge cases
  • 📚 Применение best practices

Дата завершения: 6 декабря 2025
Версия: 1.0