team-work-it-alisa_boules

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

Анализ текстовых данных (частота слов, индексация)

👥 Участники проекта

Student 1: Specification Engineer

Student 2: Developer

  • GitVerse аккаунт: @penguinqq (https://gitverse.ru/penguinqq)
  • Роль: Реализация кода на основе спецификации
  • Инструменты: Perplexity AI

Student 3: Code Reviewer

Я выполняла роль разработчика у 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

Хранит информацию об одном слове:

ПолеТипОписание
Text
stringслово в нижнем регистре
Frequency
intчастота
Positions
List<(int Line, int Column)>позиции слова

Методы:

  • AddPosition(line, column) — добавляет координату слова.

  • ToString() — отладочный вывод.

📌 Класс TextAnalyzer

Основной класс, выполняющий анализ текста.

Основные поля:

ПолеТипОписание
_wordsDictionary
Dictionary<string, Word>словарь уникальных слов
_sortedByWord
Listалфавитно отсортированный список
TotalWordCount
intобщее число слов
UniqueWordCount
intколичество уникальных слов

Основные методы:

ParseText(lines)

Разбор текста построчно:

  • извлечение слов через Regex,

  • подсчёт частоты,

  • индексирование.

GetTopWords(n)

Возвращает топ-N слов после сортировки QuickSort.

BinarySearchWord(word)

Быстрый поиск слова по алфавиту (O(log n)).

GetStatistics()

Возвращает:

  • всего слов,

  • уникальных,

  • среднюю длину слова.

SaveIndex(file)

Сохраняет индекс в файл.

📌 Класс Program

Реализует консольное меню и логику команд:

  • обработка команд;

  • вывод подсказок;

  • взаимодействие с TextAnalyzer.

🔍 Описание алгоритмов

  1. Разбор текста — O(n)

С использованием регулярного выражения:

[а-яА-ЯёЁa-zA-Z0-9#]+
  1. Индексация слов — O(n)

Каждое слово преобразуется в:

Dictionary<string, Word>
  1. QuickSort — O(n log n)

Используется собственная реализация:

  • сортировка по убыванию частоты слова;

  • без встроенных сортировок.

  1. Бинарный поиск — O(log n)

Работает по полю Text.

🎮 Команды консольного интерфейса

КомандаОписание
analyze
Анализ текста: образец или ввод вручную
search word
Поиск слова
top N
Топ-N слов по частоте
stats
Вывод общей статистики
save [file]
Сохранение индекса в файл
exit
Выход

🧪 Примеры работы

▶ Пример: 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)
QuickSortO(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

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

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

  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 или выше

Запуск приложения

Пример использования

🟦 Старт программы

После запуска:

═══════════════════════════════════════════════════════════ 🔍 Система анализа текста (Вариант 7) ═══════════════════════════════════════════════════════════ Доступные команды: analyze - Ввести текст вручную или загрузить образец search [слово] - Найти конкретное слово top [N] - Показать топ N слов по частоте stats - Показать общую статистику save [файл] - Сохранить индекс слов в файл exit - Выход из приложения ▶ Введите команду:

🟩 Пример 1 — analyze

Команда:

analyze

Выбираем загрузку образца:

📋 Опции анализа: 1. Загрузить образец текста 2. Ввести текст вручную Выберите (1 или 2): 1

Результат:

✅ Образец текста загружен и проанализирован успешно! 📄 Образец текста: C# это мощный язык. Он популярен для веб и игровой разработки. Алгоритм сортировки необходим. Быстрая сортировка быстра. Бинарный поиск эффективен. Разработка на C# требует понимания структур.

Команда:

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 минут
Результат: Файл

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

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

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

Время: ~35-40 минут
Инструменты: Perplexity AI Процесс:

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

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

dev/solution.cs

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

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

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

Статус: APPROVED ✅

✔ Заключение

Данный проект реализует:

  • полный анализ текста,

  • частотный словарь,

  • индекс позиций слов,

  • сортировку по частоте (QuickSort),

  • бинарный поиск,

  • удобный интерфейс команд.