раздел 03

Как перевести документы в лёгкие форматы

Самый быстрый способ - попросить агента. Он сам поставит нужный инструмент, прогонит папку и покажет, что получилось. Но полезно знать, какие инструменты он возьмёт, чтобы проверить результат и поправить руками, если что-то пошло не так.

Через агента

Положите исходники в отдельную папку и дайте задачу:

В папке _source/ лежат docx-файлы. Переведи каждый в Markdown с тем же
именем и положи рядом в корень проекта (report.docx -> report.md).
Сохрани заголовки, списки и таблицы. Ничего не пересказывай и не
сокращай: текст должен совпадать с оригиналом слово в слово.
Картинки вынеси в папку images/ и подключи ссылками.
После конвертации выведи список файлов и для каждого - число таблиц
в исходнике и в результате.

Последняя строка важна: она заставляет агента проверить себя. Если в docx было четыре таблицы, а в md три - вы узнаете сразу.

Для таблиц Excel:

В _source/ лежит clients.xlsx с тремя листами. Сохрани каждый лист
отдельным CSV в кодировке UTF-8 с разделителем-запятой:
clients-active.csv, clients-archive.csv, clients-leads.csv.
Первая строка - названия колонок. Формулы заменить на значения.
Покажи первые три строки каждого файла и число строк.

Инструменты, которые он возьмёт

1
pandoc - для docx, odt, html, epub
Универсальный конвертер документов. Ставится одной командой, понимает десятки форматов, хорошо держит заголовки, списки и простые таблицы.
2
Экспорт из Excel и Google Sheets - для таблиц
Встроенная функция «Сохранить как CSV». Надёжнее любого конвертера, потому что это родной формат приложения.
3
Google Docs - экспорт в Markdown или TXT
В меню «Файл - Скачать» есть Markdown. Для документов, которые живут в Google, это самый чистый путь.
4
pdftotext - для PDF с текстовым слоем
Часть пакета poppler. Вытаскивает текст, старается сохранить расположение. Для отчётов и договоров работает хорошо, для журнальной вёрстки - хуже.
5
OCR - для сканов и фото
Если в PDF нет текстового слоя, нужно распознавание. Агент подберёт инструмент под платформу (tesseract, облачные API, встроенное распознавание модели).

pandoc

# docx в Markdown (диалект по умолчанию - pandoc markdown)
pandoc report.docx -o report.md

# в GitHub-flavored Markdown: таблицы через |, привычная разметка
pandoc report.docx -t gfm -o report.md

# картинки вынести в папку images/ рядом
pandoc report.docx -t gfm --extract-media=images -o report.md

# вся папка разом
for f in _source/*.docx; do
  pandoc "$f" -t gfm --extract-media=images -o "$(basename "${f%.docx}").md"
done

Вариант с -t gfm почти всегда предпочтительнее: он даёт таблицы через вертикальные черты, которые агент читает лучше всего.

Excel и Google Sheets

В Excel: «Файл - Сохранить как - CSV UTF-8 (разделители - запятые)». Именно вариант с UTF-8, иначе на Windows кириллица сохранится в кодировке Windows-1251 и агент увидит вопросики. Один лист - один файл: Excel экспортирует только активный лист, остальные надо сохранять отдельно.

В Google Sheets: «Файл - Скачать - CSV (текущий лист)». Кодировка всегда UTF-8.

Google Docs

«Файл - Скачать - Markdown (.md)». Если пункта нет, есть обходной путь: скачать как docx и прогнать через pandoc, или «Обычный текст (.txt)», если разметка не нужна.

PDF

# текст с сохранением расположения (колонки, таблицы)
pdftotext -layout contract.pdf contract.txt

# без -layout: сплошной текст, лучше для абзацев без таблиц
pdftotext contract.pdf contract.txt

Результат - TXT. Если в документе есть явные разделы, стоит потратить пять минут и расставить заголовки ##, превратив его в Markdown. Или попросить агента: «расставь заголовки по разделам, ничего не меняя в тексте».

Сканы

Проверить, есть ли в PDF текстовый слой, просто: попробуйте выделить текст мышью в просмотрщике. Не выделяется - это картинка, нужен OCR. Дальше лучше не выбирать инструмент самому, а сказать агенту:

В _source/scan.pdf нет текстового слоя. Подбери и поставь OCR-инструмент
под мою систему, распознай документ на русском и сохрани в scan.md.
Разбей на разделы по заголовкам, которые видны в скане.
Отметь в конце файла места, где распознавание неуверенное.

Чек-лист после конвертации

Конвертер отработал без ошибок - это ещё не значит, что всё на месте. Откройте результат и пройдитесь:

  • Таблицы. Число таблиц совпадает с исходником, в каждой столько же строк и колонок, объединённые ячейки не съехали.
  • Нумерация. Нумерованные списки идут 1, 2, 3, а не 1, 1, 1. Многоуровневые списки сохранили вложенность.
  • Картинки. Лежат в папке рядом, ссылки на них рабочие. Если картинки не нужны для работы - удалить ссылки, чтобы агент не пытался их открыть.
  • Спецсимволы. Кавычки, тире, неразрывные пробелы, символы валют. Кракозябры вместо кириллицы - значит, проблема с кодировкой, пересохранить в UTF-8.
  • Заголовки. Уровни вложенности соответствуют исходнику: раздел - ##, подраздел - ###.
  • Колонтитулы и номера страниц. Из PDF они часто попадают в текст между абзацами - вычистить.
  • Сноски. pandoc выносит их в конец, pdftotext может вставить прямо в текст. Проверить, что сноска не разорвала предложение.

Если документов много, чек-лист тоже можно отдать агенту: «пройди по каждому md в папке и проверь пункты списка, отчёт таблицей».

Частые вопросы

pandoc не поставился или его нет в системе
Попросите агента: «поставь pandoc под мою систему и проверь, что команда работает». На macOS это brew install pandoc, на Ubuntu - apt install pandoc, на Windows - установщик с сайта или winget.
Таблица в docx с объединёнными ячейками превратилась в кашу
Markdown не умеет объединённые ячейки. Два пути: разбить объединённые ячейки в Word перед конвертацией (повторить значение в каждой) или вынести такую таблицу в CSV отдельным файлом.
После экспорта из Excel числа стали датами или потеряли нули в начале
Это Excel «помогает» ещё до экспорта. Перед сохранением задайте таким колонкам текстовый формат. Или экспортируйте через Google Sheets - он аккуратнее.
PDF на 200 страниц, pdftotext выдал один огромный файл
Нормально. Попросите агента разбить по главам в отдельные md-файлы с индексом. Или оставьте одним файлом, но с заголовками - агент ищет по ним.
Нужно конвертировать регулярно, документы приходят каждую неделю
Заведите скрипт convert.sh в проекте, который прогоняет всё из _source/ и кладёт рядом. Агент напишет его за минуту. Как встроить это в рабочий процесс - в следующей главе.