Почему PDF-файл с двумя столбцами извлекается последовательно? Сначала сохраните координаты, а потом говорите о порядке чтения.
Объясните, что сериализация текста в формате PDF с двумя столбцами обусловлена отсутствием семантической структуры в формате, уточните, что параметр сортировки — это всего лишь геометрическая сортировка. Синтетический пример Python, основанный на распределении координат, предназначен для демонстрации логики реорганизации последовательности, пояснения применимых границ и красных линий ручного просмотра, а также предоставления прагматичного пути принятия, который объединяет рабочий процесс перевода OmniDoc.
Текстовые последовательности, извлеченные из PDF-файлов с двумя столбцами, часто не распознаются неправильно, но читаются в неправильном порядке. Эта статья предназначена для читателей, которым необходимо извлечь текст из PDF-файлов с двумя столбцами, таких как статьи и отчеты, а затем перевести или упорядочить их.
Читатели обычно сталкиваются с такой ситуацией: в середине левого столбца за следующим предложением следует объяснение формулы в правом столбце. Все символы могут быть распознаны правильно, но порядок нарушен. В этой статье сначала объясняется, почему происходит сериализация, а затем на синтетическом примере демонстрируется, как реорганизовать порядок путем разделения по координатам. Наконец, в нем указаны применимые границы и список приемки, чтобы вы могли решить, можно ли его использовать в ваших собственных файлах.
Почему PDF-файл с двумя столбцами извлекается последовательно? Вывод в одно предложение
Сначала сохраните координаты и исходную страницу, а затем сортируйте по региональным правилам. Не сжимайте всю страницу напрямую в длинную строку.
| твоя ситуация | Рекомендуемые практики | причина |
|---|---|---|
| Обычная статья в две колонки, текстовая сериализация. | Сначала прочитайте левый столбец раздела, затем прочитайте правый столбец. | Попеременное построчное соединение приведет к уничтожению абзацев. |
| Просто хотел быстро попробовать | Сравните результаты включения и выключения sort | sort выполняет только геометрическую сортировку, подходящую для страниц правил. |
| Страницы имеют заголовки, состоящие из нескольких колонок, боковые примечания и сноски. | Обработка отдельно по регионам и проверка региональных связей | Сама по себе геометрическая сортировка не может определить принадлежность этого содержания. |
| Необходимо передать модель перевода | Сохраняйте координаты и номера страниц, сначала организуйте порядок, а затем переводите. | Контексты в неправильном порядке трудно исправить даже путем изменения модели. |
Почему заказ испорчен?
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-файлах с двумя столбцами координаты и исходные страницы следует сначала сохранить, затем обработать с использованием региональных правил и проверить поэлементно в соответствии с контрольным списком приемки. Самостоятельные скрипты подходят для наглядного написания правил, а готовые инструменты — для сокращения ссылок на операции. Их можно использовать вместе.
Попробуйте сейчас: загрузите документ, чтобы начать перевод, сохранив исходный макет.


