PDF2MD: сканы и архивы в текст и отчёт, где OCR мог ошибиться
PDF2MD превращает папки, архивы и сканы в Markdown и пишет отчёт: какие страницы пропали, где вместо текста мусор. Разбираю по исходникам, куда уходят файлы, как считается качество и как проверить программу пилотом на 100 страницах.
Сделаю под ключ: разберу задачу, назову срок и цену. Чтобы начать, напишите в Telegram одной фразой.
Настроить конвейер документов с проверкой качества распознаванияПачка договоров из ZIP и вопрос, можно ли верить тексту
Допустим, бухгалтерии или юристу присылают архив: сотни сканов договоров, актов и счетов, часть PDF, часть фотографии, часть многостраничные TIFF. Нужен текст, по которому можно искать и который можно отдать ИИ-помощнику. Обычный конвертер выдаёт файлы и молчит: пропала страница 14, три листа пустые, на четвёртом набор символов. Вы узнаете об этом, когда по документу не найдётся нужный пункт.
Про ИИ-помощника по документам у меня есть разбор Yahont CE, про поиск по готовым файлам статья про rga. Здесь речь о шаге до них: как получить текст и понять, где ему не стоит доверять.
Что это за проект и что я проверил
Проверял 24.10.2026 по репозиторию gogi2305/PDF2MD: README, исходники, LICENSE, историю коммитов. Сам проект не запускал, всё ниже по документации и коду. Файл LICENSE содержит текст MIT, правообладатель указан как gogi2305. Первый коммит датирован 8 октября 2026, последний 9 октября (версия 1.4.0, она же единственный релиз). Всего шесть коммитов, 7 звёзд, один форк, репозиторий не архивирован. Автор один, юридического лица нет.
Это настольная программа с окном (Tkinter) для Windows, Linux и macOS. Для Windows в релизе лежит PDF2MD.exe размером около 150 МБ без цифровой подписи, SmartScreen его предупредит. Исходники рядом, exe собирается скриптом build_exe.py. Готовый exe я не проверял, надёжнее запускать из исходников.
Как устроен отчёт
В коде две проверки. Первая: страницы. В Markdown перед каждой страницей ставится скрытая метка вида page N. Отчёт сравнивает число страниц исходного PDF с метками и перечисляет пропавшие и пустые. Надёжно это работает для цифровых PDF и для Mistral OCR, который возвращает страницы списком. У Gemini метки зависят от того, выполнит ли модель инструкцию. Для LlamaParse и GLM-OCR проверка страниц не работает, отчёт пишет «не проверено».
Вторая: эвристика по тексту, считается на весь документ. Мусорным считается слово со смесью кириллицы и латиницы или слово от пяти букв без гласных. «Сомнительно» получает документ короче 15 символов, с 25 процентами мусорных слов и больше, с 10 процентами меток «неразборчиво» и больше или с более чем пятью символами замены. Для «проверить» достаточно 10 процентов мусорных слов, 3 процентов меток или одного символа замены. Остальное «надёжно».
Из этого следуют два ограничения. Оценка по документу целиком, поэтому одна плохая страница в большом файле может размыться в среднем. Разработчик сам пишет в README: «надёжно» означает, что явного мусора нет. Искажённая сумма, фамилия, неверная цифра в ИНН проходят проверку.
Дополнительно можно включить сверку вторым OCR-движком. Он прогоняет только документы, не получившие «надёжно», сравнивает тексты и при сходстве ниже 85 процентов пишет HTML с двумя колонками. Расхождение показывает, где смотреть, но не какой движок прав.
Куда уходят файлы
По исходникам сканы, фото и TIFF (перед отправкой он превращается в PDF) уходят целиком на серверы выбранного сервиса: Gemini (модель gemini-2.5-flash, адрес generativelanguage.googleapis.com), Mistral (api.mistral.ai), LlamaParse (cloud.llamaindex.ai) или GLM (api.z.ai). У Mistral код удаляет загруженный PDF после распознавания. Условия остальных сервисов я не проверял.
Локально читаются только цифровые PDF с текстовым слоем и файлы Office: для цифрового PDF в коде нужен текст (от 40 символов) хотя бы на половине из первых 12 страниц. Вкладка поиска тоже не полностью локальная: векторный индекс строится через Gemini, поэтому куски текста и ваш вопрос уходят в Google, даже если ответы пишет локальная Ollama.
Если в архиве персональные данные, передача их внешнему сервису требует отдельного решения: поручение обработки, серверы за границей. С этим идут к юристу. О локализации данных я писал в отдельной статье. Доступность этих сервисов из России: уточняйте. Полностью локальное распознавание делают модели вроде Chandra, но отчёта об ошибках в них нет.
Архивы, имена и установка
ZIP распаковывается встроенными средствами. Для имён из виндовых архивов код пробует cp866 и cp1251, кракозябр нет, есть защита от путей вверх (zip slip). Для RAR и 7z нужен установленный 7-Zip (запасные варианты: tar и py7zr для 7z). Вложенные архивы разворачиваются, многотомный RAR открывается с первого тома, архив с паролем не останавливает пачку, символьные ссылки пропускаются. Файлы с одинаковыми именами из разных мест получают суффикс: x.pdf и x_2.pdf. Имена внутри RAR и 7z обрабатывает 7-Zip, это я не проверял, как и его лицензию.
Выход: Markdown с метками страниц, JSON-фрагменты, report.md и report.json. Word и PDF на выходе нет. Для Office-файлов нужен Python 3.12 или 3.13.
Что важно учесть
Сравнений точности на русских документах в репозитории нет. Рукописный текст, печати и сложные таблицы зависят от выбранной модели, гарантий README не даёт. Скорость зависит от лимитов сервиса: для Gemini в коде есть пауза между запросами под лимит 15 запросов в минуту, результаты кэшируются по хешу файла. Цифр производительности нет.
Что можно сделать уже сейчас
Сначала пилот. Возьмите 100 страниц: 80 обычных и 20 заведомо плохих (перекос, бледная печать, телефонное фото, факс). Эти 20 важнее остальных: отчёт должен их заметить. Используйте обезличенные копии, если юрист не разрешил иное.
Чек-лист из семи пунктов:
- Какие файлы уходят наружу, проверьте по исходникам и сетевому трафику.
- Сколько из 20 плохих сканов отчёт пометил «проверить» или «сомнительно».
- Совпадает ли число страниц в отчёте с числом в оригинале для каждого файла.
- Выберите 15 критичных полей на документ: даты, суммы, ИНН, номера договоров, и сверьте их глазами.
- Оригиналы храните, текст нужен для поиска.
- Файлы с пометкой «не проверено» сверяйте вручную целиком.
- Заранее решите, кто и какую долю архива проверяет выборочно.
Настроить конвейер, выбрать распознавание в облаке или на вашем сервере и подключить результат к поиску или ИИ-помощнику могу в рамках автоматизации бизнеса.
Частые вопросы
Можно ли использовать PDF2MD без отправки данных наружу?
Для цифровых PDF, Word и Excel да, они читаются локально. Сканам и фото нужен ключ облачного сервиса.
Заменяет ли отчёт ручную проверку?
Нет. Он показывает пропавшие страницы и явный мусор, а неверно прочитанные цифры не ловит.
Что с кириллицей в именах файлов?
Для ZIP код подбирает кодировку cp866 или cp1251. Для RAR и 7z имена обрабатывает 7-Zip, я это не проверял.
Коротко о главном
PDF2MD под лицензией MIT собирает папки и архивы в Markdown и показывает пропавшие страницы и явный мусор. Сканы он отправляет в облачный OCR, проекту две недели, автор один, точность на русских документах не измерена.
Если нужно проверить такую схему на ваших документах и собрать конвейер с контролем качества, напишите мне в Telegram кодовое слово «ПРОПУСКИ».
Ещё open-source для бизнеса
Эта статья — часть каталога бесплатных решений, которые я разворачиваю на вашем сервере под ключ: CRM, аналитика, документы, почта, безопасность, магазины, AI.
Что я делаю для бизнеса
Напишите одной фразой, что нужно. Отвечу, что подойдёт, сколько займёт и сколько стоит. Сообщение уже подготовлено.
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


