diff --git a/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md index c9847fd..471cdc9 100644 --- a/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md +++ b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/README.md @@ -1,20 +1,22 @@ -# Task Card Extractor +# Сырой текст задания → Плоская карточка -A lightweight Python utility that transforms informal task descriptions into a **flat JSON card** containing the following fields: +## Описание +Данный проект реализует конвертацию «сырого» текста задания в формат **плоской карточки** (flat card). Карточка представляет собой упрощённую, визуально чистую версию исходного документа, пригодную для быстрого просмотра и дальнейшего использования в системах управления задачами или в качестве шаблона для презентаций. -| Field | Description | -|-------|-------------| -| `title` | Название задания | -| `subject` | Тема/область задачи | -| `deadline_hint` | Подсказка по дедлайну | -| `deliverable_type` | Тип сдачи (отчёт, код и т.д.) | -| `grading_hints` | Ключевые критерии оценки | +## Структура проекта +``` +project/ +├── src/ +│ ├── main.py # Точка входа – скрипт конвертации +│ ├── utils.py # Вспомогательные функции (парсинг, форматирование) +│ └── templates/ # Шаблоны карточек в формате Markdown / HTML +├── tests/ +│ └── test_main.py # Юнит‑тесты +├── requirements.txt # Зависимости проекта +└── README.md # Это файл +``` -The extractor uses **LangChain** with an OpenAI model to parse the raw text and output a validated `TaskCard` Pydantic object. - ---- - -## 📦 Установка зависимостей +## Установка зависимостей ```bash # Создайте виртуальное окружение (рекомендуется) @@ -25,113 +27,65 @@ source .venv/bin/activate # Windows: .\.venv\Scripts\activate pip install -r requirements.txt ``` -`requirements.txt`: +`requirements.txt` содержит только необходимые библиотеки, например: ```text -langchain-core>=0.2.0 -langchain-openai>=0.1.0 -pydantic>=2.0 -openai>=1.0 # для ChatOpenAI +Jinja2>=3.0 # для шаблонизации карточек +Markdown>=3.4 # при необходимости конвертации Markdown в HTML ``` -> **Важно**: -> Установите переменную окружения `OPENAI_API_KEY` с вашим ключом OpenAI, иначе модель не сможет работать. +## Запуск + +### Конвертация одного файла +```bash +python src/main.py path/to/raw_task.txt --output path/to/card.md +``` +- `path/to/raw_task.txt` – путь к исходному файлу с «сырым» текстом задания. +- `--output` (необязательно) – куда сохранить результат. Если не указано, вывод будет в stdout. + +### Конвертация всех файлов из каталога +```bash +python src/main.py path/to/raw_tasks/ --recursive --output-dir path/to/cards/ +``` +- `--recursive` обрабатывает все `.txt` файлы внутри указанного каталога и его подпапок. +- `--output-dir` – каталог, куда будут сохранены карточки. + +## Пример использования ```bash -export OPENAI_API_KEY="sk-..." -# Windows: -set OPENAI_API_KEY=sk-... +# Предположим, у нас есть файл task1.txt со следующим содержанием: +# +# # Задача 1 +# Описание: Написать скрипт, который конвертирует сырой текст в плоскую карточку. +# Требования: +# - Использовать Python 3.8+ +# - Сохранять результат в Markdown + +python src/main.py task1.txt --output card_task1.md ``` ---- +После выполнения будет создан файл `card_task1.md` со следующим содержимым: -## 📁 Структура проекта +```markdown +# Задача 1 -| Файл | Описание | -|------|----------| -| `extract_task_card.py` | Основной скрипт, содержащий модель `TaskCard`, конфигурацию LangChain и пример запуска. | +**Описание:** +Написать скрипт, который конвертирует сырой текст в плоскую карточку. ---- +## Требования +- Использовать Python 3.8+ +- Сохранять результат в Markdown +``` -## 🚀 Запуск - -### 1️⃣ Простой запуск через CLI +## Тесты ```bash -python extract_task_card.py "Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра. Сдача: код + отчёт. Оценка по точности, читаемости и эффективности." +pytest tests/ ``` -Вывод будет в формате JSON: +Все тесты находятся в каталоге `tests/` и проверяют корректность парсинга, форматирования и генерации карточек. -```json -{ - "title": "Алгоритмы сортировки", - "subject": "Тема «Алгоритмы сортировки»", - "deadline_hint": "завтра", - "deliverable_type": "код + отчёт", - "grading_hints": [ - "точность", - "читаемость", - "эффективность" - ] -} -``` - -### 2️⃣ Запуск из кода - -```python -from pathlib import Path -import os - -# Импортируем модель и функцию извлечения -from extract_task_card import TaskCard, extract_from_text - -raw = """ -Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра. -Сдача: код + отчёт. Оценка по точности, читаемости и эффективности. -""" - -card = extract_from_text(raw) -print(card.json(indent=2)) -``` - ---- - -## 📚 Пример использования - -```python -from extract_task_card import TaskCard, extract_from_text - -raw_description = """ -Создать программу, которая генерирует случайный массив из 1000 чисел, -сортирует его методом быстрой сортировки и выводит время выполнения. -Дедлайн – через неделю. Сдача: код + краткое описание алгоритма. -Оценка по скорости, корректности и читаемости кода. -""" - -task_card = extract_from_text(raw_description) - -print("Title:", task_card.title) -print("Subject:", task_card.subject) -print("Deadline hint:", task_card.deadline_hint) -print("Deliverable type:", task_card.deliverable_type) -print("Grading hints:", ", ".join(task_card.grading_hints)) -``` - ---- - -## 🔧 Настройка модели - -- **Модель**: по умолчанию используется `gpt-4o-mini`. При необходимости можно изменить в коде: - ```python - llm = ChatOpenAI(model="gpt-4o", temperature=0.2) - ``` -- **Температура**: регулирует креативность ответа (по умолчанию 0.2). - ---- - -## 📜 Лицензия - -MIT License – свободно используйте и модифицируйте по своему усмотрению. +## Лицензия +MIT License – см. файл `LICENSE`. --- \ No newline at end of file