Skip to content

Layout and reading order RU

Bodhi42 edited this page Nov 1, 2026 · 1 revision

🌐 English · Русский

Читайте колонки в правильном порядке

Установите 0.5.1 и скачайте примеры.

Если читать страницу с двумя колонками поперёк, несвязанные предложения перемешаются. Порядок чтения указывает Occular закончить один текстовый блок, прежде чем переходить к следующему.

Сравните первые строки в двух режимах

Даже правильно распознанные слова трудно читать, когда строки чередуются между несвязанными колонками. Вот верхняя часть исходной страницы в удобном для чтения масштабе:

Верхняя часть двух колонок из фактического вывода Matplotlib

Подсказка к примеру: заголовок слева сообщает, что речной вокзал откроется в мае; абзац справа предупреждает водителей о гололедице. В выводе Речной вокзал... — начало заголовка о вокзале, а мае — его продолжение («в мае»); с Автомобилистов... начинается предупреждение водителям. Режим по умолчанию должен разделять эти сюжеты.

Этот код меняет последовательность строк на том же полном изображении:

from occular import ocr

plain = ocr("columns.png", reading_order=False)
ordered = ocr("columns.png", reading_order=True)
print("TOP TO BOTTOM — first 8 lines")
print("\n".join(plain.splitlines()[:8]))
print("\nREADING ORDER — first 8 lines")
print("\n".join(ordered.splitlines()[:8]))

Фрагменты фактического вывода: первые восемь строк в каждом режиме:

TOP TO BOTTOM — first 8 lines
ВЕСТНИК ПРИВОЛЖЬЯ
Выпуск № 7 (412) - четверг. 19 февраля 2026 года - цена свободная
Автомобилистовросят учитывать гололедицу на
Речной вокзал откроют после ремонта в
мостах и подъезда к городу
мае
Дорожникизакончат развязкунагод
Работы на здании речного вокзала, закрытого для

READING ORDER — first 8 lines
ВЕСТНИК ПРИВОЛЖЬЯ
Выпуск № 7 (412) - четверг. 19 февраля 2026 года - цена свободная
Речной вокзал откроют после ремонта в
мае
Работы на здании речного вокзала, закрытого для
пассажиров два года назад, выходят на финальную
стадию, Подрядчик заменил кровлю восстановил
лепнину центрального зала и смонтировал новую

Без упорядочивания предупреждение из правой колонки разрывает заголовок о вокзале из левой. С упорядочиванием за Речной вокзал... следуют продолжение мае и статья о вокзале. Ошибки в словах остаются: эта функция расставляет строки, а не исправляет их текст.

Открыть настоящий запуск в Jupyter: весь код виден

Колонки в порядке чтения: весь код блокнота и фактический вывод

Скачать блокнот · columns.png

Функция уже включена. Начните с обычного вызова:

from occular import ocr

print(ocr("columns.png"))

Модель макета находит области страницы: абзацы, заголовки и другие блоки. Другая модель использует эти области, чтобы определить, что читать дальше. Сложные страницы всё равно могут потребовать проверки.

Получите области страницы для своего приложения

Используйте отдельный вызов, когда нужны метки и координаты областей:

from occular import LayoutDetector

page = LayoutDetector().detect("invoice.png")
print("Image size:", page.width, page.height)
for region in page.regions[:5]:
    print(region.label, round(region.score, 2))

Фактический вывод:

Image size: 1654 2339
Text 0.97
Text 0.96
Table 0.96
SectionHeader 0.94
Text 0.93

Блокнот рисует возвращённые области обычными прямоугольниками Matplotlib. Здесь показан выбранный фрагмент счёта; крупные подписи обозначают предсказанные области:

Читаемые метки областей на выбранном фрагменте счёта

Отдельный вызов детектора макета возвращает области по уверенности, а не в порядке чтения. Рамки (x1, y1, x2, y2) заданы в пикселях именно этого входного изображения; оценки показывают уверенность детекции.

Открыть настоящий запуск в Jupyter: весь код виден

Поиск областей страницы: весь код блокнота и фактический вывод

Скачать блокнот · invoice.png

Например, область может иметь метку Text, Table или Picture. Рамка показывает, где она находится на изображении.

Найденная область Table ещё не даёт её ячейки. Для этого включите распознавание таблиц. Область Form не означает извлечение именованных полей формы.

Сравнить с простым выводом сверху вниз
from occular import ocr

print(ocr("columns.png", reading_order=False))

Меняется этап упорядочивания. Метки макета не заставляют OCR пропускать изображения или удалять текст.

При извлечении готового текста PDF порядок OCR по макету не применяется. Как обрабатываются PDF →

Все метки, рамки и оценки →

Clone this wiki locally