сырой текст задания → плоская карточка: README.md
This commit is contained in:
+69
-101
@@ -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
|
```bash
|
||||||
# Создайте виртуальное окружение (рекомендуется)
|
# Создайте виртуальное окружение (рекомендуется)
|
||||||
python -m venv .venv
|
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
|
```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`).
|
### 2. Тесты (если есть)
|
||||||
- **--output** – куда сохранить готовую карточку (`.md`). Если опустить, вывод будет в stdout.
|
|
||||||
|
|
||||||
### 2️⃣ Запуск через `make`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make run INPUT=task.txt OUTPUT=card.md
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3️⃣ Тестирование
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pytest tests/
|
pytest tests/
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
## Пример использования
|
||||||
|
|
||||||
## 📄 Пример использования
|
```python
|
||||||
|
>>> from task_parser import parse_assignment
|
||||||
|
|
||||||
**Входной файл (`task.txt`):**
|
>>> raw = "Сдать презентацию по «Машинное обучение» к пятнице, оценка по структуре и содержанию."
|
||||||
|
>>> card = parse_assignment(raw)
|
||||||
|
>>> print(card.title)
|
||||||
|
Сдать презентацию по «Машинное обучение»
|
||||||
|
|
||||||
```text
|
>>> print(card.subject)
|
||||||
# Разработка API для обработки заказов
|
«Машинное обучение»
|
||||||
|
|
||||||
Нужно создать REST‑API, которое будет принимать POST запросы с JSON‑объектом заказа и сохранять его в БД.
|
>>> print(card.deadline_hint)
|
||||||
|
к пятнице
|
||||||
|
|
||||||
## Требования к функционалу
|
>>> print(card.deliverable_type)
|
||||||
- Валидация входных данных.
|
презентация
|
||||||
- Ответ 201 при успешном создании.
|
|
||||||
- Ошибки возвращаются с кодами 400/422.
|
|
||||||
|
|
||||||
## Критерии приёмки
|
>>> print(card.grading_hints)
|
||||||
1. API принимает корректный JSON и сохраняет заказ.
|
['структуре', 'содержанию']
|
||||||
2. При некорректном JSON клиент получает 400 со списком ошибок.
|
|
||||||
3. Тесты покрывают все ветви логики.
|
|
||||||
|
|
||||||
## Сроки
|
|
||||||
- Дедлайн: **2026‑06‑30**.
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Запуск:**
|
## Что дальше
|
||||||
|
- Добавить более сложные правила извлечения (например, распознавание дат).
|
||||||
```bash
|
- Интегрировать в пайплайн ассистента по учёбе.
|
||||||
python raw_to_card.py --input task.txt --output card.md
|
- Писать unit‑тесты для разных сценариев.
|
||||||
```
|
|
||||||
|
|
||||||
**Выход (`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.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Автор:** *[Ваше имя]*
|
**Автор:** *[Ваше имя]*
|
||||||
**Дата создания:** 2026‑05‑26
|
**Дата:** 27 мая 2026 г.
|
||||||
Reference in New Issue
Block a user