Промт для ChatGPT: как превратить фото таблиц в Word в редактируемые таблицы

Инструкция / Нейросети

Промт для ChatGPT: как превратить фото таблиц в Word в редактируемые таблицы

Загружаете файл в Code Interpreter, даёте правильную инструкцию — и получаете .docx с настоящими таблицами, которые можно сортировать, править и переносить в Excel. Без ручного набора и онлайн-конвертеров.

Проблема знакомая всем

Приходит договор, отчёт или прайс в .docx. Открываете — а таблиц нет. Есть фотографии таблиц: скрины из Excel, фото распечаток, сканы со штампами. Выделить ячейку нельзя, отсортировать — тем более. Остаётся либо перебивать вручную, либо искать сомнительные онлайн-OCR, которые ломают структуру и теряют заголовки.

ChatGPT с включённым Code Interpreter (Advanced Data Analysis) решает это иначе: он не «смотрит» на картинку глазами, а пишет Python-скрипт, который извлекает изображения из документа, прогоняет их через OCR (Tesseract или paddleocr) и собирает обратно в новый .docx с объектами Table.

Почему это работает сейчас

Раньше LLM был только текстом. Теперь у него есть «руки» — песочница с Python. Он может: разархивировать .docx (это ZIP), достать папку word/media, найти там все PNG/JPG, скармлить их библиотеке распознавания, починить разметку и запаковать обратно.

Ключевое условие — правильный промт. Он должен заставить модель не угадывать, а действовать по алгоритму: извлечь → распознать → валидировать → собрать. Ниже — готовый промт и пошаговый разбор, как его адаптировать под свой файл.

Подготовка

Что нужно перед стартом

Всё умещается в один чат. Никаких API-ключей и локальных скриптов.

  • ChatGPT Plus / Team / Enterprise
  • Включённый Code Interpreter
  • Файл .docx до 100 МБ
  • 2–5 минут времени

Как включить Code Interpreter

В веб-версии: начните новый чат → нажмите на название модели (GPT-4o) → поставьте галочку «Code Interpreter» или «Advanced Data Analysis». В мобильном приложении: тап по модели → переключатель «Анализ данных». Значок плюса рядом с полем ввода должен позволять загрузить файл.

Готовый промт: копируйте и адаптируйте

Промт для вставки в чатv2.1 — устойчивее к склеенным ячейкам
# РОЛЬ И ЦЕЛЬ
Ты — инженер по обработке документов. Твоя задача: взять загруженный .docx, найти все изображения, которые являются таблицами, распознать их через OCR и вернуть новый .docx, где эти изображения заменены на нативные таблицы Word (объекты python-docx Table). Текст вне таблиц оставить нетронутым.

# АЛГОРИТМ ДЕЙСТВИЙ (выполняй пошагово в коде)

1. РАСПАКОВКА И АНАЛИЗ
- Распаковать .docx как zip-архив.
- Прочитать word/document.xml — понять структуру: где стоят рисунки (w:drawing / w:pict), к каким абзацам привязаны.
- Сохранить маппинг: paragraph_id → image_filename (из word/media/).
- Скопировать все файлы word/media/*.png, *.jpg, *.jpeg во временную папку.

2. ФИЛЬТРАЦИЯ: ТАБЛИЦА ИЛИ НЕТ?
- Для каждого изображения: быстро проверить, похоже ли на таблицу (геометрия: много горизонтальных/вертикальных линий, структура ячеек). Можно использовать OpenCV findContours / HoughLines или эвристику по aspect ratio и density.
- Отсеять логотипы, подписи, фото, схемы. Оставить только кандидаты-таблицы.

3. OCR С НАСТРОЙКОЙ ПОД ТАБЛИЦЫ
- Использовать paddleocr (lang='ru', use_angle_cls=True, table=True) ИЛИ tesseract с --psm 6 (uniform block) + дообучение на структуре.
- Важно: сохранить координаты bbox каждой ячейки/строки, чтобы восстановить геометрию (rowspan/colspan).
- Если paddleocr не установлен — доустановить через pip install paddleocr paddlepaddle (в песочнице это работает).

4. ПОСТРОЕНИЕ МОДЕЛИ ТАБЛИЦЫ
- Из OCR-результатов собрать матрицу ячеек: rows × cols.
- Обработать merged cells: если bbox ячеек перекрываются или выстроены в спаны — вычислить rowspan/colspan.
- Очистить текст: убрать артефакты распознавания (мусорные символы, переносы внутри ячейки), привести заголовки к единому регистру если нужно.

5. СБОРКА NOVОГО DOCX
- Создать новый Document() через python-docx.
- Пройти по исходному document.xml последовательно:
  - Если абзац — обычный текст: скопировать runs с сохранением стилей (bold, italic, font, size).
  - Если абзац содержит изображение-кандидат: вместо run с рисунком вставить table.add_table(rows, cols), заполнить ячейки текстом, применить rowspan/colspan через _tc.get_or_add_tcPr()... (vMerge / hMerge).
  - Сохранить ширину колонок пропорционально bbox исходных ячеек.

6. СТИЛИ И ФИНИШ
- Навесить на таблицы базовый стиль 'Table Grid' (границы видно).
- Сохранить файл как 'имя_файла_fixed.docx'.
- Вернуть мне ссылку на скачивание.

# ВАЖНЫЕ ОГРАНИЧЕНИЯ
- Не галлюцинируй данные. Если ячейка не прочиталась — поставь пустую строку или '[не распознано]'.
- Не меняй порядок абзацев и текст между таблицами.
- Если файл большой (>50 картинок) — обрабатывай батчами, пиши прогресс в лог.
- В конце выведи сводку: сколько изображений обработано, сколько таблиц создано, какие пропущены и почему.

# ЗАПУСК
Начинай работу сразу. Первым шагом — распакуй файл и покажи список найденных изображений в word/media/.

Шаг 1. Загрузка

Перетащите .docx в чат (значок «+» → «Загрузить файл»). Дождитесь индикатора «Анализирую…». Не пишите промт до загрузки — контекст файла должен быть доступен кодом.

Шаг 2. Промт

Вставьте промт выше. Если в файле специфика (рукописный текст, вертикальные заголовки, цветные ячейки) — добавьте строку в конец: «Доп. условие: в таблицах вертикальные заголовки / рукописный шрифт / ячейки с заливкой — сохраняй цвет фона ячейки».

Шаг 3. Запуск

Отправьте. Модель начнёт писать и выполнять код. В интерфейсе появится блок «Анализ данных» с логами: установка библиотек, распаковка, OCR, сборка. Для больших файлов процесс может занять 2–4 минуты. Не прерывайте генерацию.

Шаг 4. Результат

Чат выдаст ссылку «Скачать fixed.docx». Откройте — таблицы стали нативными. Проверьте 2–3 сложные таблицы: заголовки, склеенные ячейки, числа. Если где-то сбилось — допишите уточняющий промт: «В таблице 3 сбились колонки 2 и 3 — перераспознай с psm 4».

Типовые подводные камни и как их обходить

1

Склеенные ячейки (merged cells)

OCR часто не видит, что две ячейки — одна. Промт выше просит paddleocr с table=True — он лучше определяет span. Если не помогло: допишите «используй логику: если bbox двух ячеек перекрывается по вертикали/горизонтали > 80% — объединяй».

2

Сканы низкого качества / наклон

Фото с телефона под углом — враг OCR. В промте уже есть use_angle_cls=True. Если всё равно криво: добавьте «перед OCR сделай perspective transform: найди углы таблицы (approxPolyDP) и выпрями warpPerspective».

3

Огромные файлы (100+ таблиц)

Песочница имеет лимит по времени (120 сек) и памяти. Промт просит батчи. Если упадёт по таймауту — напишите: «Разбей на части: обработай первые 20 таблиц, верни промежуточный файл, потом следующие».

4

Рукописный текст в ячейках

Tesseract/Paddle плохо читают руки. Вариант: «Для ячеек, где confidence < 0.6, не гадай — пиши [рукописно]». Потом такие места доработаете вручную за секунды, а не минуты.

5

Цветовые заливки и границы

python-docx умеет заливку (shading) и borders. Добавьте в промт: «Перенеси background color ячейки (если определишь по среднему цвету bbox) в table_cell.shading.fill». Полностью идентично не выйдет, но близко.

6

Таблица на несколько страниц

В Word это одна таблица, разорванная разрывом страницы. В .xml это два блока. Промт собирает по порядку — получится две таблицы. Допишите: «Если две соседние таблицы имеют одинаковое число колонок и похожие заголовки — объедини в одну».

Ручной труд vs Промт

Сравнение на документе 15 страниц, 12 таблиц, среднее качество сканов.

Показатель
Ручной ввод
Промт + Code Interpreter
1
Время (мин)
~60–90
~3–5
2
Ошибки в числах
1–2% (усталость)
0.5–1% (OCR noise)
3
Склеенные ячейки
Вручную — точно
Требует донастройки
4
Сохранение стилей текста
Полностью
~90% (runs копируются)
5
Повторяемость на след. файле
Каждый раз с нуля
Один промт — на все

Чек-лист приёмки результата

Главное правило

Промт — это не магия, это ТЗ для микросервиса

Вы не просите «сделай хорошо». Вы даёте алгоритм: где взять данные, как их почистить, как собрать обратно. Качество результата — функция полноты вашего описания процесса.

Один раз настроил — запускаешь на любой пачке файлов годами