Написать в Telegram@Odilient

ИИ И АВТОМАТИЗАЦИЯ

Пайплайн крупного шрифта для Knigopoisk

Python-пайплайн, который превращает отсканированные PDF-книги с OCR-слоем в аккуратные PDF с крупным шрифтом, EPUB с перетекающим текстом и обложки для каталога русскоязычного книжного интернет-магазина.

Knigopoisk
Клиент
Книги и издательское дело
Отрасль
2026
Год
С чего всё началось

Задача

Некоторые книги существуют только в виде отсканированных PDF с OCR-слоем: неподвижные изображения страниц, мягкие переносы и ошибки распознавания вроде латинских букв внутри русских слов. Слабовидящим читателям нужна та же книга, заново свёрстанная крупным кеглем, а магазину электронных книг — ещё и EPUB с перетекающим текстом и приличная обложка. И всё это без ручного перенабора сотен страниц.

Что мы сделали

Решение

Мы сделали пятиэтапный Python-пайплайн на PyMuPDF, ReportLab, Pillow и NumPy. Он извлекает каждую строку текста с координатами, склеивает строки в абзацы, убирает мягкие переносы, исправляет типичные ошибки OCR, находит части и главы по размеру заголовков и вырезает иллюстрации по подписям к ним. Из одной промежуточной структуры он собирает EPUB и PDF любого кегля — начиная с 18 pt переключаясь на вёрстку с крупным шрифтом, — а также обложку для каталога в пропорциях 2:3.

Технологии
PythonPyMuPDFReportLabPillowNumPyEPUB
За кулисами

Как всё создавалось

Как превратить сканированные PDF в издания с крупным шрифтом в PDF и EPUB

Для Knigopoisk — русскоязычного магазина электронных книг и аудиокниг — мы сделали пайплайн, который превращает отсканированную PDF-книгу с OCR-слоем в доступные издания: PDF с крупным шрифтом нужного кегля, EPUB с перетекающим текстом и обложку в формате 2:3, которого ждут карточки книг на витрине. Это внутренний производственный инструмент, а не функция для покупателей.

Как работает пайплайн

  1. Извлечение — extract.py читает PDF с помощью PyMuPDF и записывает каждую строку текста с её координатами на странице в rows.json.
  2. Восстановление структуры — build3.py склеивает строки в абзацы, убирает мягкие переносы и исправляет типичные ошибки OCR — например, неверно распознанные кириллические буквы и латинские символы внутри русских слов. По размеру шрифта заголовков он находит части, главы и разделы, а иллюстрации вырезает в отдельные изображения по подписям «Рис. N».
  3. Сборка результатов — make_outputs.py превращает список блоков в разделы и EPUB.
  4. Вёрстка — make_pdf.py <pt> верстает книгу с помощью ReportLab на формате A4 шрифтом DejaVu Sans. От 18 pt и выше собирается издание с крупным шрифтом и более узкими полями, а меньшие кегли дают обычное издание для чтения. Заголовки масштабируются от размера основного текста, висячие строки подавляются, у каждой страницы есть номер, а для навигации в PDF добавляются закладки.
  5. Обложка — make_cover.py рендерит исходный титульный лист в 300 dpi, обрезает поля скана до полосы набора и оформляет результат в JPEG размером 800×1200.

Результаты на первой книге

Мы прогнали пайплайн от начала до конца на отсканированной русскоязычной книге по менеджменту объёмом больше 250 страниц. Извлечение дало 10 004 строки текста; проход по структуре восстановил 1 589 абзацев, 4 части, 15 глав и 14 иллюстраций; а на выходе получилось 29 разделов и EPUB весом 1,6 МБ. Каждый этап пишет в лог свои счётчики, поэтому результат легко проверить до того, как что-либо попадёт в каталог.

Смежные работы

Этот инструмент дополняет другие наши работы по внедрению ИИ и автоматизации для Knigopoisk — среди них пайплайн генерации ИИ-аудиокниг и партнёрский виджет Knigopoisk.

Создадим вместе

Хотите что-то вроде Пайплайн крупного шрифта для Knigopoisk?

Расскажите, что должен делать ваш продукт. Мы определим объём работ, распишем сроки и пришлём фиксированную цену — бесплатно и без обязательств продолжать.

Бесплатная консультация Без обязательств Быстрый ответ