Почему PDF-файл с двумя столбцами извлекается последовательно? Сначала сохраните координаты, а потом говорите о порядке чтения.

Объясните, что сериализация текста в формате PDF с двумя столбцами обусловлена отсутствием семантической структуры в формате, уточните, что параметр сортировки — это всего лишь геометрическая сортировка. Синтетический пример Python, основанный на распределении координат, предназначен для демонстрации логики реорганизации последовательности, пояснения применимых границ и красных линий ручного просмотра, а также предоставления прагматичного пути принятия, который объединяет рабочий процесс перевода OmniDoc.

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

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

Почему PDF-файл с двумя столбцами извлекается последовательно? Вывод в одно предложение

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

твоя ситуацияРекомендуемые практикипричина
Обычная статья в две колонки, текстовая сериализация.Сначала прочитайте левый столбец раздела, затем прочитайте правый столбец.Попеременное построчное соединение приведет к уничтожению абзацев.
Просто хотел быстро попробоватьСравните результаты включения и выключения sortsort выполняет только геометрическую сортировку, подходящую для страниц правил.
Страницы имеют заголовки, состоящие из нескольких колонок, боковые примечания и сноски.Обработка отдельно по регионам и проверка региональных связейСама по себе геометрическая сортировка не может определить принадлежность этого содержания.
Необходимо передать модель переводаСохраняйте координаты и номера страниц, сначала организуйте порядок, а затем переводите.Контексты в неправильном порядке трудно исправить даже путем изменения модели.

Почему заказ испорчен?

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

Такие проблемы не обязательно возникают на этапе идентификации. Возможно, все слова упомянуты правильно, но в неправильном порядке. Поэтому идея решения должна быть сосредоточена на сортировке и зонировании, а не на многократном изменении ссылок распознавания или перевода.

Сначала сохраняйте координаты, а потом уже обсуждайте порядок чтения

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

  • Сохраняйте четыре координаты каждого текстового блока, чтобы облегчить последующее принятие решения о принадлежности территории.

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

  • Если региональная информация утеряна, последующие переводы получат неправильный контекст, и изменение модели перевода может не исправить эту ситуацию.

sort=True стоит попробовать, но он не поддерживает компоновку

PyMuPDF предоставляет различные формы извлечения, такие как текст, слова, блоки и т. д. Конкретная обработка sort зависит от типа и версии вывода. В целом его нельзя охарактеризовать как фиксированный алгоритм набора текста, и нельзя обещать, что он восстановит порядок чтения всех документов.

Рекомендации по использованию следующие:

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

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

Эта статья не реализует универсальное распознавание макета, а лишь демонстрирует, «как сортировать согласно существующим региональным правилам» и четко объясняет границы возможностей. Интерфейс и форму извлечения см. в Официальное руководство по извлечению текста PyMuPDF.

Используйте пять синтезированных текстовых блоков, чтобы объяснить проблему

Страница примера имеет ширину 600 пунктов с границей между столбцами в 300 пунктов; в пределах 80 пунктов от верха находится область заголовка между столбцами, а ниже — текстовая область. Ввод намеренно зашифрован: второй абзац в правом столбце идет первым, а первый абзац в левом столбце — последним. Каждый кортеж содержит четыре координаты прямоугольника и текст. Это упрощенная структура, определенная для демонстрационных целей и не эквивалентная полному возвращаемому значению get_text("blocks").

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

Небольшой пример, который можно запустить полностью

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

def order_known_layout(blocks, split_x=300, title_bottom=80):
    groups = {"title": [], "left": [], "right": []}
    rejected = []
    for block in blocks:
        x0, y0, x1, y1, text = block
        if x1 <= x0 or y1 <= y0:
            rejected.append(block)
            continue
        if y1 <= title_bottom:
            region = "title"
        elif y0 < title_bottom:
            rejected.append(block)
            continue
        elif x1 <= split_x:
            region = "left"
        elif x0 >= split_x:
            region = "right"
        else:
            rejected.append(block)
            continue
        groups[region].append(block)
    ordered = []
    for region in ("title", "left", "right"):
        ordered.extend(sorted(groups[region], key=lambda b: (b[1], b[0])))
    return [b[4] for b in ordered], rejected

sample = [(330, 160, 550, 190, "R2"), (40, 100, 270, 130, "L1"),
          (40, 20, 550, 50, "TITLE"), (330, 100, 550, 130, "R1"),
          (40, 160, 270, 190, "L2")]
ordered, rejected = order_known_layout(sample)
assert ordered == ["TITLE", "L1", "L2", "R1", "R2"]
assert rejected == []
wide = (40, 220, 550, 250, "FULL WIDTH BODY")
assert order_known_layout(sample + [wide])[1] == [wide]
assert order_known_layout([]) == ([], [])
print("known-layout examples: 3 assertions passed")

80 и 300 в примере взяты из настроек на этой составной странице и не являются эмпирическими пороговыми значениями, применимыми ко всем PDF-файлам. При изменении ширины левого и правого столбцов следующей страницы, если используются параметры предыдущей страницы, может возникнуть ситуация «программа работает нормально, но содержимое неверное». Региональные правила должны следовать за страницей, как минимум записывать версию правила и размер страницы.

📊 Сравнение ядра

Метод обработкичто можно сделатьНа что обратить внимание
Используйте sort=True напрямуюВыполните геометрическую сортировку по координатам. Сначала вы можете попробовать это на странице правил.Непонятно, кто является владельцем заголовков между колонками, примечаний на полях и сносок.
Сортировка по координатному разделуСначала разделите область, а затем читайте по разделам, чтобы облегчить осмотр.Порог раздела зависит от страницы и должен проверяться для каждой страницы.
Порядок чтения, аннотированный вручнуюРезультат максимально контролируем и пригоден для проверки ключевых документов.Высокая стоимость, подходит для выборочных проверок и тестов.

Не просто проверять, нет ли ошибок при приемке

Проверить элементыЧто посмотретьЧто делать, если оно не совпадает
Порядок площадиПосле заголовка сначала весь левый столбец, затем весь правый столбец.Проверяйте правила разделов и не патчите путем изменения строк
сохранение контентаКоличество принятых блоков плюс количество отклоненных блоков равно количеству входных блоков.Заблокируйте доставку и проверьте, нет ли потери сайлентблока
Перекрестный текстпоявиться в списке запрещенныхДобавьте новый раздел с препятствиями или отправьте его на ручное рассмотрение.
Поворот и обрезкаВходной блок использует ту же систему координат, что и раздел.Сначала унифицируйте координаты, а затем принимайте решение о включении
Заголовок, нижний колонтитулОтдельная классификация по бизнес-правиламНе удалять весь нижний текст

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

🎯 Какой метод подходит вам?

если ты……

  • Только страницы с одним или двумя столбцами, которым необходимо обрабатывать правила: сначала сравните результаты включения и выключения sort, а затем решите, нужны ли правила разделения.
  • Обработка документов с составными заголовками, рисунками и сносками: разделяйте страницы по разделам и устанавливайте списки исключений для составного содержимого.
  • Перевод необходимо передать другим: сохраните координаты и номера страниц и проверяйте их поочередно согласно списку приемки. Не просто проверяйте, нет ли ошибок во время операции.
  • Не хотите поддерживать скрипты самостоятельно: вы можете напрямую использовать готовые инструменты перевода документов и проверять перевод с помощью того же набора последовательных контрольных списков.

Как получить процесс перевода OmniDoc

Ценность самостоятельно созданных сценариев заключается в четком написании правил приемки; Ценность готовых средств перевода заключается в сокращении операционных связей между файлами и переводами. Между ними нет конфликта. OmniDoc (портал продуктов) предоставляет портал для перевода документов, а на официальном сайте также представлены такие функции, как распознавание текста, глоссарий и двуязычное сравнение. Вы можете выбрать десенсибилизированную статью, на загрузку которой у вас есть разрешение, и проверить перевод, используя тот же последовательный контрольный список.

Сосредоточьтесь на проверке следующих пунктов:

  • Правильно ли связано первое предложение после заголовка перекрестия.
  • Включены ли подписи к рисункам в текст?
  • Сопоставляются ли ссылки сносок с правильным местоположением.

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

❓ Часто задаваемые вопросы (FAQ)

1. Серийный PDF-файл в две колонки, он распознается неправильно?

неопределенный. Все слова могут быть распознаны правильно, но проблема часто заключается в порядке чтения, поэтому сначала следует проверить сортировку и региональные правила.

2. Может ли sort=True напрямую решить проблему двойного порядка столбцов?

Его нельзя обобщать. Обработка sort зависит от типа и версии вывода, он не поддерживает форматирование и не может обещать восстановить порядок чтения всех документов. Сначала вы можете попробовать страницу правил, а также проверить региональную связь для страниц с межколоночным контентом.

3. Почему нельзя сжать всю страницу в длинную строку?

Как только координаты и информация о местности будут утеряны, последующие переводы получат неверный контекст, и изменение модели перевода может не исправить ситуацию.

4. Можно ли использовать 80 и 300 баллов в примере непосредственно в других PDF-файлах?

не могу. Это всего лишь настройки для этой составной страницы. При изменении размера страницы или ширины столбца версию правила следует проверить и записать отдельно для каждой страницы.

📝 Резюме

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

Попробуйте сейчас: загрузите документ, чтобы начать перевод, сохранив исходный макет.

Обновлено 2026-11-13