diff --git a/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md index a025edd..0a29dc6 100644 --- a/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md +++ b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md @@ -1,136 +1,104 @@ # Сырой текст задания → плоская карточка -Проект преобразует **сырой текст** (описание задачи, требования и т.д.) в **плоскую карточку**, пригодную для визуализации в системах управления задачами (Jira, Trello, Notion и др.). -Он разбирает входной файл, выделяет ключевые элементы (название, описание, критерии приёмки, сроки) и генерирует готовую Markdown‑карточку. +## Описание проекта +Проект реализует **модуль разбора одной формулировки задачи** в компактную сводку (`AssignmentCard`). +Он принимает неформальное описание задания (строку или короткий абзац) и возвращает объект с полями: -> **Важно** – проект написан на Python 3.10+ и использует только стандартную библиотеку и небольшие сторонние пакеты для парсинга Markdown. +| Поле | Тип | Описание | +|------|-----|----------| +| `title` | `str` | Краткое название задачи | +| `subject` | `str` | Область знаний / предмет | +| `deadline_hint` | `str | None` | Указание срока сдачи в свободной форме (например, «к пятнице»). Если не найдено – `None`. | +| `deliverable_type` | `str` | Тип сдаваемого материала (отчёт, код, презентация и т.д.) | +| `grading_hints` | `List[str]` | Ключевые критерии оценки, перечисленные в тексте. Если не найдено – пустой список. | ---- - -## 📦 Установка зависимостей +Модель работает без диалога: она получает один запрос и выдаёт один ответ. +## Установка зависимостей ```bash # Создайте виртуальное окружение (рекомендуется) python -m venv .venv -source .venv/bin/activate # Windows: .\.venv\Scripts\activate +source .venv/bin/activate # Windows: .venv\Scripts\activate -# Установите зависимости из файла requirements.txt -pip install -r requirements.txt +# Установите пакеты +pip install langchain-core langchain-openai pydantic python-dotenv ``` -`requirements.txt` содержит: +> **Важно** +> Для работы с LLM необходимо задать переменные окружения: +> ```bash +> export OPENAI_API_KEY="ваш_ключ" +> ``` +> (или добавить в `.env` файл). -```text -markdown==3.4.1 -rich==13.7.0 # для красивого вывода в консоли (необязательно) +## Как запустить + +### 1. `task_parser.py` +Файл содержит всю логику: модель Pydantic, шаблон запроса и функцию `parse_assignment`. + +```python +from task_parser import parse_assignment + +raw_text = """ +Нужно написать отчёт по теме «Влияние квантовых вычислений на криптографию» до следующей среды. +Критерии оценки: оригинальность идеи, корректность расчётов, оформление в формате LaTeX. +""" + +card = parse_assignment(raw_text) +print(card.json(indent=2)) ``` ---- - -## 📁 Структура проекта - -| Файл | Описание | -|------|----------| -| `raw_to_card.py` | Главный скрипт, который читает сырой текст и выводит карточку. | -| `parse_raw_text.py` | Модуль парсинга – выделяет заголовки, списки, блоки кода и т.д. | -| `card_generator.py` | Формирует финальный Markdown‑файл с нужным шаблоном. | -| `tests/` | Юнит‑тесты для каждого модуля. | - ---- - -## 🚀 Запуск - -### 1️⃣ Простой запуск из командной строки +Запуск: ```bash -python raw_to_card.py --input task.txt --output card.md +python - <<'PY' +from task_parser import parse_assignment + +raw_text = """ +Нужно написать отчёт по теме «Влияние квантовых вычислений на криптографию» до следующей среды. +Критерии оценки: оригинальность идеи, корректность расчётов, оформление в формате LaTeX. +""" + +card = parse_assignment(raw_text) +print(card.json(indent=2)) +PY ``` -- **--input** – путь к файлу с сырой задачей (может быть `.txt`, `.md`). -- **--output** – куда сохранить готовую карточку (`.md`). Если опустить, вывод будет в stdout. - -### 2️⃣ Запуск через `make` - -```bash -make run INPUT=task.txt OUTPUT=card.md -``` - -### 3️⃣ Тестирование +### 2. Тесты (если есть) ```bash pytest tests/ ``` ---- +## Пример использования -## 📄 Пример использования +```python +>>> from task_parser import parse_assignment -**Входной файл (`task.txt`):** +>>> raw = "Сдать презентацию по «Машинное обучение» к пятнице, оценка по структуре и содержанию." +>>> card = parse_assignment(raw) +>>> print(card.title) +Сдать презентацию по «Машинное обучение» -```text -# Разработка API для обработки заказов +>>> print(card.subject) +«Машинное обучение» -Нужно создать REST‑API, которое будет принимать POST запросы с JSON‑объектом заказа и сохранять его в БД. +>>> print(card.deadline_hint) +к пятнице -## Требования к функционалу -- Валидация входных данных. -- Ответ 201 при успешном создании. -- Ошибки возвращаются с кодами 400/422. +>>> print(card.deliverable_type) +презентация -## Критерии приёмки -1. API принимает корректный JSON и сохраняет заказ. -2. При некорректном JSON клиент получает 400 со списком ошибок. -3. Тесты покрывают все ветви логики. - -## Сроки -- Дедлайн: **2026‑06‑30**. +>>> print(card.grading_hints) +['структуре', 'содержанию'] ``` -**Запуск:** - -```bash -python raw_to_card.py --input task.txt --output card.md -``` - -**Выход (`card.md`):** - -```markdown -# Разработка API для обработки заказов - -Нужно создать REST‑API, которое будет принимать POST запросы с JSON‑объектом заказа и сохранять его в БД. - -## Требования к функционалу -- Валидация входных данных. -- Ответ 201 при успешном создании. -- Ошибки возвращаются с кодами 400/422. - -## Критерии приёмки -1. API принимает корректный JSON и сохраняет заказ. -2. При некорректном JSON клиент получает 400 со списком ошибок. -3. Тесты покрывают все ветви логики. - -**Сроки:** 2026‑06‑30 -``` - ---- - -## 📚 Документация - -- `parse_raw_text.py` – парсинг текста с помощью регулярных выражений и библиотеки `markdown`. -- `card_generator.py` – шаблон карточки, который можно изменить в файле `templates/card_template.md`. - -Для более подробной информации смотрите комментарии внутри файлов. - ---- - -## 🤝 Вклад - -Если хотите улучшить проект: -1. Форкните репозиторий. -2. Создайте ветку (`feature/имя-изменения`). -3. Добавьте тесты и отправьте Pull Request. +## Что дальше +- Добавить более сложные правила извлечения (например, распознавание дат). +- Интегрировать в пайплайн ассистента по учёбе. +- Писать unit‑тесты для разных сценариев. --- **Автор:** *[Ваше имя]* -**Дата создания:** 2026‑05‑26 \ No newline at end of file +**Дата:** 27 мая 2026 г. \ No newline at end of file