сырой текст задания → плоская карточка: README.md
This commit is contained in:
+59
-105
@@ -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`.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user