сырой текст задания → плоская карточка: README.md
This commit is contained in:
+85
-66
@@ -1,118 +1,137 @@
|
|||||||
# Сырой текст задания → плоская карточка
|
# Сырой текст задания → плоская карточка
|
||||||
|
|
||||||
## Описание проекта
|
## Описание проекта
|
||||||
Проект предназначен для преобразования **сырого текста** (например, из файла `.txt` или `md`) в **плоскую карточку** – компактный формат, пригодный для импорта в системы обучения, флеш-карточки и т.п.
|
Проект реализует конвертацию «сырого» текста задания (например, из формата Markdown или простого текста) в **плоскую карточку** – компактный формат, пригодный для отображения в чат‑ботах, веб‑страницах и мобильных приложениях.
|
||||||
Ключевая идея: взять исходный текст задания, разбить его на логические части (вопросы/ответы), добавить метаданные (теги, уровень сложности) и вывести результат в виде простого CSV‑файла.
|
Основные возможности:
|
||||||
|
|
||||||
> **Важно** – проект не содержит графического интерфейса. Всё делается через командную строку.
|
- Парсинг исходного текста с выделением заголовков, списков, цитат и т.д.
|
||||||
|
- Генерация упрощённой карточки без лишних разметок.
|
||||||
|
- Поддержка нескольких языков (английский/русский) через простую локализацию.
|
||||||
|
|
||||||
## Структура репозитория
|
## Структура проекта
|
||||||
```
|
```
|
||||||
.
|
project/
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── main.py # точка входа, обрабатывает CLI
|
│ ├── parser.py # Парсер исходного текста
|
||||||
│ └── processor.py # логика преобразования текста в карточки
|
│ ├── card_generator.py # Генератор карточки
|
||||||
├── tests/ # unit‑тесты (необязательно)
|
│ └── utils.py # Вспомогательные функции
|
||||||
├── requirements.txt # зависимости проекта
|
├── tests/ # Тесты (необязательно)
|
||||||
└── README.md
|
├── requirements.txt # Зависимости
|
||||||
|
└── README.md # Это файл
|
||||||
```
|
```
|
||||||
|
|
||||||
## Установка зависимостей
|
## Установка зависимостей
|
||||||
|
|
||||||
```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
|
# Установите зависимости из requirements.txt
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
`requirements.txt` содержит только стандартные библиотеки, но если вы захотите добавить поддержку Markdown‑парсинга или NLP‑модулей – просто добавьте нужный пакет.
|
`requirements.txt` содержит только стандартные библиотеки, но если понадобится парсинг Markdown – добавьте `markdown`.
|
||||||
|
|
||||||
## Запуск проекта
|
## Запуск каждого файла
|
||||||
|
|
||||||
### 1. Преобразование одного файла
|
### 1. Парсер (`parser.py`)
|
||||||
|
Парсер читает сырой текст и возвращает структуру данных (словарь/список).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python src/main.py --input raw_task.txt --output flat_card.csv
|
python src/parser.py <path_to_input_file>
|
||||||
```
|
```
|
||||||
|
|
||||||
- `--input` – путь к файлу с сырым текстом задания.
|
Пример:
|
||||||
- `--output` – куда будет сохранён CSV‑файл.
|
|
||||||
|
|
||||||
#### Параметры (опциональные)
|
|
||||||
|
|
||||||
| Флаг | Описание |
|
|
||||||
|------|----------|
|
|
||||||
| `--tags TAG1,TAG2` | Добавить теги, разделённые запятой. |
|
|
||||||
| `--difficulty LEVEL` | Указать уровень сложности (`easy`, `medium`, `hard`). |
|
|
||||||
|
|
||||||
### 2. Массовый запуск
|
|
||||||
|
|
||||||
Если у вас несколько файлов в каталоге `tasks/`, можно использовать цикл:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
for f in tasks/*.txt; do
|
python src/parser.py data/raw_task.txt
|
||||||
python src/main.py --input "$f" \
|
|
||||||
--output "cards/$(basename "${f%.*}").csv" \
|
|
||||||
--tags math,algebra
|
|
||||||
done
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Проверка работы
|
Вывод в консоль будет выглядеть так:
|
||||||
|
```json
|
||||||
После выполнения вы получите CSV‑файл вида:
|
{
|
||||||
|
"title": "Задача №1",
|
||||||
```csv
|
"body": [
|
||||||
question,answer,tags,difficulty
|
{"type":"paragraph","text":"Выполните ..."},
|
||||||
"What is the derivative of x^2?","2x","math,calculus","easy"
|
{"type":"list","items":["Пункт 1", "Пункт 2"]},
|
||||||
...
|
...
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Генератор карточки (`card_generator.py`)
|
||||||
|
Генерирует плоскую карточку из структуры, полученной парсером.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python src/card_generator.py <path_to_parsed_json> <output_file>
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python src/card_generator.py data/parsed.json data/card.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Полный скрипт (`main.py`)
|
||||||
|
Если в проекте есть `main.py`, он объединяет оба шага.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python src/main.py <path_to_raw_text> <output_file>
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python src/main.py data/raw_task.txt data/card.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
## Пример использования
|
## Пример использования
|
||||||
|
|
||||||
Предположим, у вас есть файл `example_task.txt` со следующим содержанием:
|
1. **Соберите сырой текст задания** в файл `raw_task.txt`:
|
||||||
|
|
||||||
```
|
```
|
||||||
Вопрос: Какой результат умножения 7 и 6?
|
# Задача 1
|
||||||
Ответ: 42
|
|
||||||
Теги: математика, арифметика
|
Напишите программу, которая выводит сумму двух чисел.
|
||||||
Уровень сложности: средний
|
|
||||||
|
## Требования
|
||||||
|
|
||||||
|
- Ввод: два целых числа
|
||||||
|
- Вывод: их сумма
|
||||||
```
|
```
|
||||||
|
|
||||||
Запустите скрипт:
|
2. **Запустите конвертацию**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python src/main.py --input example_task.txt --output example_card.csv
|
python src/main.py raw_task.txt card.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Полученный CSV будет выглядеть так:
|
3. **Результат (`card.txt`)**:
|
||||||
|
```
|
||||||
|
Задача 1
|
||||||
|
Напишите программу, которая выводит сумму двух чисел.
|
||||||
|
|
||||||
```csv
|
Требования:
|
||||||
question,answer,tags,difficulty
|
- Ввод: два целых числа
|
||||||
"Какой результат умножения 7 и 6?","42","математика, арифметика","средний"
|
- Вывод: их сумма
|
||||||
```
|
```
|
||||||
|
|
||||||
Теперь файл `example_card.csv` можно импортировать в любую систему флеш‑карточек (Anki, Quizlet и др.).
|
## Тесты (необязательно)
|
||||||
|
|
||||||
## Тесты
|
Если в проекте есть папка `tests`, запустите:
|
||||||
|
|
||||||
Если вы хотите проверить корректность работы:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pytest tests/
|
pytest tests/
|
||||||
```
|
```
|
||||||
|
|
||||||
(Требуется пакет `pytest`, добавьте его в `requirements.txt` при необходимости.)
|
## Лицензия
|
||||||
|
|
||||||
## Вклад
|
MIT License – см. файл `LICENSE`.
|
||||||
|
|
||||||
1. Сделайте форк репозитория.
|
|
||||||
2. Создайте ветку с вашим изменением (`git checkout -b feature/…`).
|
|
||||||
3. Запуште и откройте Pull Request.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Автор:** *[Ваше имя]*
|
**Важно:**
|
||||||
**Дата создания:** 26‑05‑2026
|
- Все пути указываются относительно корня проекта.
|
||||||
|
- При работе с большими файлами используйте потоковую обработку (`open(..., 'r', encoding='utf-8')`).
|
||||||
|
|
||||||
|
Если возникнут вопросы – откройте issue в репозитории!
|
||||||
Reference in New Issue
Block a user