---
name: hebrew-lesson-extract
description: >
  Извлечение структурированного содержимого из PPTX-файлов уроков иврита в Markdown.
  Использовать этот скилл, когда пользователь загружает презентацию урока иврита (.pptx)
  и просит извлечь, разобрать или конвертировать её содержимое. Триггеры: загрузка файла
  שיעור (урока), запросы «извлечь урок», «разобрать презентацию», «сделать шпаргалку из урока»,
  «extract lesson», или любой запрос, связанный с PPTX-файлом урока иврита.
  Скилл выполняет только ИЗВЛЕЧЕНИЕ — создаёт структурированный «сырой» markdown
  с классифицированными слайдами. Отдельный скилл обогащения (`hebrew-lesson-enrich`)
  превращает его в полноценную грамматическую шпаргалку.
  Также использовать, когда пользователь просит обработать, прочитать или проанализировать
  PPTX-файл урока иврита, даже если слово «извлечь» не произнесено явно.
---

# Урок иврита: PPTX → Структурированный Markdown

Скилл извлекает содержимое из PPTX-презентаций уроков иврита и создаёт
структурированный Markdown-файл с классифицированными слайдами.

## Входные данные

1. **PPTX-файл урока иврита** — от пользователя
   - Файл презентации (`.pptx`), содержащий слайды с грамматикой, упражнениями, текстами, таблицами слов
   - Имя файла обычно содержит номер урока и части (например, `שיעור 13 חלק 3.pptx`)

Это первый скил в pipeline — предыдущих шагов нет. Если пользователь не загрузил PPTX — запросить файл.

## Выходной файл

ZIP-архив `урок_{N}_часть_{M}_extracted.zip`, внутри которого:
- `урок_{N}_часть_{M}_extracted.md` — структурированный markdown с классифицированными слайдами
- `images/` — извлечённые изображения из презентации

Если номер урока/части определить не удалось, файл будет назван `extracted.zip`.

Выходной файл — вход для скилов `hebrew-lesson-enrich` и `hebrew-homework-solve`.

---

## Что делает скилл

1. Парсит PPTX-файл с помощью `python-pptx`
2. Классифицирует каждый слайд в одну из 20 категорий (грамматика, упражнения, чтение и т.д.)
3. Извлекает текст с **сохранением огласовок (никуд)** и таблицы в формате markdown
4. Извлекает изображения и сохраняет как отдельные файлы
5. Для заданий по картинкам (например, «найди отличия») Claude описывает изображение напрямую

## Рабочий процесс

### Шаг 1: Установка зависимости и запуск извлечения

```bash
pip install python-pptx --break-system-packages -q
python3 /path/to/scripts/extract_pptx.py "<путь_к_загруженному_pptx>" /home/claude/lesson_extract
```

Скрипт создаёт файлы по конвенции из раздела «Выходной файл».

### Определение номера урока и части

Скрипт определяет номер урока (`N`) и части (`M`) из:
1. Содержимого слайдов (регулярное выражение: `שיעור <N> חלק <M>`)
2. Имени файла (запасной вариант, например `שיעור_13_חלק_3.pptx`)

| Входной файл | Выходной файл |
|---|---|
| `שיעור 13 חלק 3.pptx` | `урок_13_часть_3_extracted.md` |
| `שיעור_2_חלק_1.pptx` | `урок_2_часть_1_extracted.md` |
| `unknown.pptx` | `extracted.md` |

### Шаг 2: Проверка результата извлечения

Прочитать `урок_<N>_часть_<M>_extracted.md` и проверить:
- Правильно ли классифицированы слайды? (см. справку: `references/output_format.md`)
- Сохранён ли весь текстовый контент?
- Правильно ли отформатированы таблицы?

### Шаг 3: Обработка заданий по картинкам

Для каждого слайда, классифицированного как `image_task`:
1. Просмотреть извлечённое изображение с помощью инструмента `view`
2. Описать, что видно на изображении
3. Если это задание «найди отличия» (две похожие картинки) — перечислить различия
4. Заменить маркер `<!-- CLAUDE: ... -->` в markdown своим описанием

Описания писать **на русском**, при необходимости используя ивритские термины.

Пример оформления задания по картинке:

```markdown
## Слайд 1 — 🖼️ Задание по картинке

![Изображение](images/slide_1_img_1.jpg)

**Описание:** Дедушка и мальчик сидят на диване и играют в видеоигры.
На столе перед ними — две чашки чая, книга и зелёная бутылка.

**Различия между верхней и нижней картинками:**
1. На верхней картинке мальчик хмурится, на нижней — улыбается
2. Подушки поменялись местами (красная слева/справа)
3. Картина на стене изменилась
...
```

### Проверка выхода

Перед упаковкой проверить:

- [ ] Все слайды из PPTX присутствуют в markdown
- [ ] Классификация слайдов корректна (grammar, exercise_*, reading и т.д.)
- [ ] Таблицы отформатированы как markdown-таблицы
- [ ] Изображения извлечены в `images/` и ссылки в markdown корректны
- [ ] Огласовки (никуд) сохранены как в оригинале — не добавлены и не удалены
- [ ] Задания по картинкам (image_task) описаны Claude

### Шаг 4: Упаковка и выдача результата

Упаковать markdown и изображения в ZIP-архив по конвенции из раздела «Выходной файл».

```bash
cd /home/claude/lesson_extract
zip -r "/mnt/user-data/outputs/урок_<N>_часть_<M>_extracted.zip" "урок_<N>_часть_<M>_extracted.md" images/
```

Показать ZIP пользователю с помощью `present_files`.

## Категории слайдов

Скрипт классифицирует слайды по следующим категориям:

### Справочные / грамматические
| Категория | Эмодзи | Что распознаёт |
|---|---|---|
| `grammar` | 📖 | Объяснительный текст на русском о грамматике с примерами на иврите |
| `vocabulary` | 📝 | Таблица новых слов (מילים חדשות) |
| `conjugation` | 📊 | Таблицы спряжения глаголов (с שורש, заголовками времён) |
| `verb_summary` | 📊 | Сводная таблица глаголов по גזרות |
| `shem_peula` | 📊 | Таблицы отглагольных существительных (שם פעולה) |
| `numerals` | 🔢 | Справочные таблицы числительных (שם מספר) от 10 до 90000 |
| `prepositions` | 📖 | Таблицы склонения предлогов (מילת יחס + суффиксы) |

### Упражнения
| Категория | Эмодзи | Что распознаёт |
|---|---|---|
| `exercise_fill` | ✏️ | Упражнения на подстановку (пропуски в тексте) |
| `exercise_translate` | ✏️ | Упражнения на перевод (предложения на русском для перевода) |
| `exercise_table` | ✏️ | Табличные упражнения (заполнить пустые ячейки) |
| `exercise_choose` | ✏️ | Выбрать правильное слово из вариантов в скобках |
| `exercise_oged` | ✏️ | Упражнения на אוגד (связка/копула) |
| `exercise_morphology` | ✏️ | Определить שורש, בניין, גזרה по форме глагола |
| `exercise_transform` | ✏️ | Переписать предложения в другом времени (без пропусков) |
| `exercise_writing` | ✏️ | Написать сочинение (חיבור) |
| `exercise_questions` | ✏️ | Ответить на вопросы по прочитанному тексту |

### Тексты и прочее
| Категория | Эмодзи | Что распознаёт |
|---|---|---|
| `reading` | 📖 | Тексты для чтения на иврите, диалоги, рассказы |
| `image_task` | 🖼️ | Слайды с изображениями (найди отличия и т.п.) |
| `joke` | 😄 | Анекдоты и юмористические тексты (גולם, חושם, חלם) |
| `other` | 📄 | Неклассифицированные слайды |

## Логика классификации (сводка)

Классификатор работает поэтапно, от наиболее специфичного к наиболее общему:

1. **Только изображение** — минимум текста + изображение + нет таблицы → `image_task`
2. **Ключевые слова инструкций** — раннее определение типа упражнения по ивритским инструкциям
   (תתרגמו, תשלימו, תכתבו חיבור, תעשו לפי הדוגמה, תבחרו и т.д.)
3. **На основе таблиц** — анализ заголовков таблиц и пустых ячеек
4. **Пропуски в тексте** — паттерн `_{2,}` обнаруживает упражнения на подстановку
5. **Определение перевода** — нумерованные или ненумерованные предложения на русском
6. **Определение трансформации** — ключевое слово инструкции + нет пропусков = упражнение на переписывание
7. **Грамматические ключевые слова** — объяснительный текст на русском с грамматической терминологией
8. **Чтение** — длинный текст преимущественно на иврите
9. **Запасные варианты** — по соотношению русских и ивритских символов

## Важные замечания

- **Сохранение огласовок**: формат PPTX сохраняет огласовки гораздо лучше, чем PDF.
  Скрипт извлекает текст как есть, сохраняя все огласовки.
- **Текст справа налево**: ивритский текст может иметь разное направление в зависимости
  от инструмента, которым создан PPTX. Скрипт извлекает сырой текст без перестановки.
- **Определение пропусков**: скрипт распознаёт пропуски от `__` (2+ подчёркивания),
  а не только длинные `______` последовательности.
- **Классификация эвристическая**: скрипт использует ключевые слова и сопоставление паттернов.
  Некоторые слайды могут быть классифицированы неверно. При необходимости проверять и поправлять.
- **Без обогащения**: этот скилл НЕ добавляет грамматические объяснения, исторические
  комментарии или дополнительные примеры. Это делает скилл `hebrew-lesson-enrich`.
