сырой текст задания → плоская карточка: README.md

This commit is contained in:
2026-05-27 07:23:53 +00:00
parent 11118303f5
commit e7a4c478d6
@@ -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` | Название задания | project/
| `subject` | Тема/область задачи | ├── src/
| `deadline_hint` | Подсказка по дедлайну | │ ├── main.py # Точка входа – скрипт конвертации
| `deliverable_type` | Тип сдачи (отчёт, код и т.д.) | │ ├── utils.py # Вспомогательные функции (парсинг, форматирование)
| `grading_hints` | Ключевые критерии оценки | │ └── 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 ```bash
# Создайте виртуальное окружение (рекомендуется) # Создайте виртуальное окружение (рекомендуется)
@@ -25,113 +27,65 @@ source .venv/bin/activate # Windows: .\.venv\Scripts\activate
pip install -r requirements.txt pip install -r requirements.txt
``` ```
`requirements.txt`: `requirements.txt` содержит только необходимые библиотеки, например:
```text ```text
langchain-core>=0.2.0 Jinja2>=3.0 # для шаблонизации карточек
langchain-openai>=0.1.0 Markdown>=3.4 # при необходимости конвертации Markdown в HTML
pydantic>=2.0
openai>=1.0 # для ChatOpenAI
``` ```
> **Важно**: ## Запуск
> Установите переменную окружения `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 ```bash
export OPENAI_API_KEY="sk-..." # Предположим, у нас есть файл task1.txt со следующим содержанием:
# Windows: #
set OPENAI_API_KEY=sk-... # # Задача 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 ```bash
python extract_task_card.py "Напиши задание по теме «Алгоритмы сортировки». Дедлайн – завтра. Сдача: код + отчёт. Оценка по точности, читаемости и эффективности." pytest tests/
``` ```
Вывод будет в формате JSON: Все тесты находятся в каталоге `tests/` и проверяют корректность парсинга, форматирования и генерации карточек.
```json ## Лицензия
{ MIT License см. файл `LICENSE`.
"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 – свободно используйте и модифицируйте по своему усмотрению.
--- ---