Video Thumbnail

Best Way to OCR a PDF in Python - spaCy Layout

Python Tutorials for Digital Humanities15:21
https://www.youtube.com/watch?v=quJtzVxoMtE

Содержание

Краткое резюме

В видео рассказывается о важном обновлении библиотеки SpaCy — пакете SpaCy Layout, который кардинально упрощает работу с PDF-документами. Он позволяет всего одной строкой кода провести распознавание текста (OCR), определение таблиц, изображений и других регионов документа, а затем интегрировать результаты в классический NLP-пайплайн SpaCy для анализа текста, включая распознавание именованных сущностей и разметку частей речи. Такой подход делает работу с PDF гораздо удобнее, позволяет получать структурированные данные из изображений и таблиц, а также визуализировать расположение текста на страницах с помощью координат bounding box.


Обзор SpaCy Layout: революция в работе с PDF

SpaCy Layout — это новый пакет от Explosion AI, разработчиков SpaCy, который впервые нативно интегрируется с NLP-пайплайном для обработки PDF-документов. Основное новшество — возможность одной строкой кода выполнить задачи:

  • Детекция регионов (tables, images, текст)
  • OCR (распознавание текста) при помощи DocLing
  • Передача результата в классический пайплайн SpaCy для лингвистического анализа (например, POS-теггинг, Named Entity Recognition)

«В одной строке кода вы можете оцифровать PDF, обнаружить таблицы и изображения, а также воспользоваться всеми преимуществами SpaCy для дальнейшего анализа текста.»

Почему это важно?

PDF — формат, с которым традиционно сложно работать из-за отсутствия структурированных данных. Стандартный OCR часто не справляется с точным позиционированием текста, таблиц и других элементов. SpaCy Layout:

  • Повышает качество detection за счёт DocLing — библиотеки, хорошо работающей с layout-анализом.
  • Позволяет получать структурированный вывод: текст, bounding boxes с координатами, метки секций (заголовок, список, параграф).
  • Легко преобразует таблицы в Markdown или в pandas DataFrame — удобно для дальнейшей работы с данными.
  • Оптимизирован для работы с современными PDF и типографикой.
  • Идеально вписывается в workflows, где затем будут использоваться большие языковые модели (LLM), поддерживая вывод в Markdown для удобного парсинга.

Практическое использование SpaCy Layout

Установка и запуск

Рекомендуется Python 3.10+, устанавливаются SpaCy и SpaCy Layout, вместе с моделью English en_core_web_sm.

!pip install spacy spacy-layout
!python -m spacy download en_core_web_sm

Далее создаётся NLP-объект и объект layout, связанный с ним:

import spacy
from spacy_layout import SpacyLayout

nlp = spacy.load("en_core_web_sm")
layout = SpacyLayout(nlp)

Обработка PDF

Вся работа делается одной строкой — передаём в pipeline путь к PDF:

doc = layout("path_to_pdf.pdf")

Этот вызов запускает:

  • Детекцию блоков текста, таблиц, изображений
  • OCR для распознавания текста
  • Формирование структурированных объектов с координатами, метками и текстом

Работа с результатами

Можно получить весь распознанный текст через:

print(doc._.layout.txt)

Или вывести документ в Markdown формате через специальный атрибут:

print(doc._.layout.markdown)

Markdown-формат удобен для передачи текстов в большие языковые модели, поскольку более компактен и легко разбирается, чем HTML.

Работа со страницами и блоками

Через атрибуты doc._.layout.pages и doc._.layout.pages[page_index] можно получить данные о каждой странице, включая размеры и номер.

Каждая страница содержит список блоков текста с метками: заголовок, параграф, список и т.д. Для каждого блока доступны:

  • Текст
  • Label (тип блока)
  • Координаты (x, y, ширина, высота)
  • Номер страницы

Это позволяет визуализировать структуру страницы, например, отрисовывать bounding boxes.


Визуализация и дополнительные возможности

Для визуализации можно использовать matplotlib, чтобы отобразить страницы PDF вместе с ограничивающими рамками блоков текста.

«SpaCy Layout даёт не только текст, но и точные координаты каждого текстового блока — это именно та информация, которая нужна для визуализации и сложного downstream анализа.»


Интеграция с NLP анализом

Ключевая сила SpaCy Layout — возможность дополнительно пропустить распознанный текст через стандартный NLP-пайплайн SpaCy. Это даёт:

  • Распознавание именованных сущностей в пределах каждого блока и страницы
  • POS-теггинг
  • Привязку сущностей к страницам и регионам документа
doc2 = nlp(doc.text)

Таким образом можно анализировать частоту появлений сущностей, их расположение в документе, проводить сложные агрегирования и визуализации на основе содержимого оригинального PDF.


Итоги и перспективы

SpaCy Layout — одно из крупнейших обновлений, направленных на упрощение работы с PDF-документами в NLP. Он объединяет в одном инструменте:

  • OCR высокого качества с поддержкой современных PDF
  • Структурированный вывод таблиц и регионов
  • Интуитивный API, где всё сводится к одной строке обработки документа
  • Глубокую интеграцию с экосистемой SpaCy для лингвистического анализа
  • Возможность визуализации контента с разметкой позиционирования

«Это сейчас один из лучших способов обработки PDF и последовательных изображений с получением структурированных данных, которые легко использовать в больших NLP-пайплайнах.»

Если вы работаете с PDF документами в NLP — стоит попробовать SpaCy Layout, чтобы значительно упростить и улучшить ваш процесс.


🎯 Основной плюс: одна строка кода для комплексной обработки PDF — от OCR до NER, с сохранением структуры документа и поддержкой Markdown-вывода.