сырой текст задания → плоская карточка: README.md
This commit is contained in:
+75
-49
@@ -1,12 +1,9 @@
|
|||||||
# Сырой текст → плоская карточка
|
# Сырой текст задания → плоская карточка
|
||||||
|
|
||||||
Простой скрипт, который берёт **сырой текст** задания (например, из PDF‑файла) и преобразует его в **плоскую карточку** – готовый к использованию шаблон для обучения.
|
Проект преобразует **сырой текст** (описание задачи, требования и т.д.) в **плоскую карточку**, пригодную для визуализации в системах управления задачами (Jira, Trello, Notion и др.).
|
||||||
В проекте реализованы два основных файла:
|
Он разбирает входной файл, выделяет ключевые элементы (название, описание, критерии приёмки, сроки) и генерирует готовую Markdown‑карточку.
|
||||||
|
|
||||||
| Файл | Что делает |
|
> **Важно** – проект написан на Python 3.10+ и использует только стандартную библиотеку и небольшие сторонние пакеты для парсинга Markdown.
|
||||||
|------|------------|
|
|
||||||
| `extract_text.py` | Извлекает текст из PDF‑файла (или другого источника) и сохраняет его в `.txt`. |
|
|
||||||
| `flatten_card.py` | Читает сырой текст, разбивает его на логические блоки (описание, условия, примеры), форматирует и выводит «плоскую карточку» в консоль или в файл. |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -17,92 +14,121 @@
|
|||||||
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
|
# Установите зависимости из файла requirements.txt
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
`requirements.txt` содержит:
|
`requirements.txt` содержит:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
PyPDF2==3.0.1
|
markdown==3.4.1
|
||||||
python-docx==0.8.11 # если понадобится работа с DOCX
|
rich==13.7.0 # для красивого вывода в консоли (необязательно)
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Запуск файлов
|
## 📁 Структура проекта
|
||||||
|
|
||||||
### 1️⃣ Извлечение текста из PDF
|
| Файл | Описание |
|
||||||
|
|------|----------|
|
||||||
|
| `raw_to_card.py` | Главный скрипт, который читает сырой текст и выводит карточку. |
|
||||||
|
| `parse_raw_text.py` | Модуль парсинга – выделяет заголовки, списки, блоки кода и т.д. |
|
||||||
|
| `card_generator.py` | Формирует финальный Markdown‑файл с нужным шаблоном. |
|
||||||
|
| `tests/` | Юнит‑тесты для каждого модуля. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Запуск
|
||||||
|
|
||||||
|
### 1️⃣ Простой запуск из командной строки
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python extract_text.py --input path/to/assignment.pdf --output assignment.txt
|
python raw_to_card.py --input task.txt --output card.md
|
||||||
```
|
```
|
||||||
|
|
||||||
- `--input` – путь к исходному файлу (PDF, DOCX и т.д.).
|
- **--input** – путь к файлу с сырой задачей (может быть `.txt`, `.md`).
|
||||||
- `--output` – куда сохранить извлечённый текст.
|
- **--output** – куда сохранить готовую карточку (`.md`). Если опустить, вывод будет в stdout.
|
||||||
|
|
||||||
### 2️⃣ Форматирование в плоскую карточку
|
### 2️⃣ Запуск через `make`
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python flatten_card.py --input assignment.txt --output card.txt
|
make run INPUT=task.txt OUTPUT=card.md
|
||||||
```
|
```
|
||||||
|
|
||||||
- `--input` – файл с сырым текстом.
|
### 3️⃣ Тестирование
|
||||||
- `--output` – путь, где будет сохранена «плоская» карточка.
|
|
||||||
Если опция не указана, результат выводится в консоль.
|
```bash
|
||||||
|
pytest tests/
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📄 Пример использования
|
## 📄 Пример использования
|
||||||
|
|
||||||
### Исходный PDF (`assignment.pdf`)
|
**Входной файл (`task.txt`):**
|
||||||
|
|
||||||
```
|
```text
|
||||||
Задание: Написать программу, которая считает сумму двух чисел.
|
# Разработка API для обработки заказов
|
||||||
Условие:
|
|
||||||
- Вводятся два целых числа.
|
Нужно создать REST‑API, которое будет принимать POST запросы с JSON‑объектом заказа и сохранять его в БД.
|
||||||
- Вывести их сумму.
|
|
||||||
Пример:
|
## Требования к функционалу
|
||||||
Ввод: 3 5
|
- Валидация входных данных.
|
||||||
Вывод: 8
|
- Ответ 201 при успешном создании.
|
||||||
|
- Ошибки возвращаются с кодами 400/422.
|
||||||
|
|
||||||
|
## Критерии приёмки
|
||||||
|
1. API принимает корректный JSON и сохраняет заказ.
|
||||||
|
2. При некорректном JSON клиент получает 400 со списком ошибок.
|
||||||
|
3. Тесты покрывают все ветви логики.
|
||||||
|
|
||||||
|
## Сроки
|
||||||
|
- Дедлайн: **2026‑06‑30**.
|
||||||
```
|
```
|
||||||
|
|
||||||
### Команды
|
**Запуск:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python extract_text.py --input assignment.pdf --output raw.txt
|
python raw_to_card.py --input task.txt --output card.md
|
||||||
python flatten_card.py --input raw.txt --output card.txt
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Полученная карточка (`card.txt`)
|
**Выход (`card.md`):**
|
||||||
|
|
||||||
```
|
```markdown
|
||||||
Задание:
|
# Разработка API для обработки заказов
|
||||||
Написать программу, которая считает сумму двух чисел.
|
|
||||||
|
|
||||||
Условие:
|
Нужно создать REST‑API, которое будет принимать POST запросы с JSON‑объектом заказа и сохранять его в БД.
|
||||||
- Вводятся два целых числа.
|
|
||||||
- Вывести их сумму.
|
|
||||||
|
|
||||||
Пример:
|
## Требования к функционалу
|
||||||
Ввод: 3 5
|
- Валидация входных данных.
|
||||||
Вывод: 8
|
- Ответ 201 при успешном создании.
|
||||||
|
- Ошибки возвращаются с кодами 400/422.
|
||||||
|
|
||||||
|
## Критерии приёмки
|
||||||
|
1. API принимает корректный JSON и сохраняет заказ.
|
||||||
|
2. При некорректном JSON клиент получает 400 со списком ошибок.
|
||||||
|
3. Тесты покрывают все ветви логики.
|
||||||
|
|
||||||
|
**Сроки:** 2026‑06‑30
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📚 Что дальше?
|
## 📚 Документация
|
||||||
|
|
||||||
* Добавить поддержку Markdown‑форматирования (`--format markdown`).
|
- `parse_raw_text.py` – парсинг текста с помощью регулярных выражений и библиотеки `markdown`.
|
||||||
* Интегрировать с Anki для автоматической импорта карточек.
|
- `card_generator.py` – шаблон карточки, который можно изменить в файле `templates/card_template.md`.
|
||||||
* Расширить парсер, чтобы корректно обрабатывать таблицы и списки.
|
|
||||||
|
Для более подробной информации смотрите комментарии внутри файлов.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Контрибьюторы
|
## 🤝 Вклад
|
||||||
|
|
||||||
Если хотите помочь – откройте issue или pull request.
|
Если хотите улучшить проект:
|
||||||
Пожалуйста, соблюдайте стиль кода из `PEP8` и добавляйте тесты в папку `tests/`.
|
1. Форкните репозиторий.
|
||||||
|
2. Создайте ветку (`feature/имя-изменения`).
|
||||||
|
3. Добавьте тесты и отправьте Pull Request.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user