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

Поясніть, що серіалізація PDF-тексту в подвійний стовпець виникає через відсутність у форматі семантичної структури, поясніть, що параметр сортування є лише геометричним сортуванням. Синтетичний приклад Python на основі розподілу координат надається, щоб продемонструвати логіку реорганізації послідовності, уточнити застосовні межі та червоні лінії перегляду вручну, а також забезпечити прагматичний шлях прийняття, який з’єднує робочий процес перекладу OmniDoc.

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

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

Чому PDF-файл із двома стовпцями витягується послідовно? Висновок одним реченням

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

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

Чому замовлення зіпсовано?

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

Такі проблеми не обов'язково виникають на етапі ідентифікації. Можливо, всі слова згадуються правильно, але в неправильному порядку. Тому ідея рішення має бути зосереджена на сортуванні та зонуванні, а не на повторній зміні посилань розпізнавання чи перекладу.

Спочатку зберігайте координати, а потім говорите про порядок читання

Перш ніж вирішити проблему впорядкування, збережіть координати та сторінку походження тексту. Не поспішайте стискати всю сторінку в один довгий рядок.

  • Зберігайте чотири координати кожного текстового блоку, щоб полегшити подальше судження про власність території.
  • Зберігайте вихідний номер сторінки, щоб полегшити відстеження та ручну перевірку.
  • Якщо регіональна інформація буде втрачена, наступні переклади отримають неправильний контекст, і зміна моделі перекладу не зможе це виправити.

sort=Правда, варто спробувати, але це не засіб для розуміння компонування

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 (Запис продукту) надає портал перекладу документів, а офіційний сайт також пропонує такі функції, як OCR, термінологія та двомовне порівняння. Ви можете обрати десенсибілізований документ із правом завантажити і перевірити переклад, користуючись тим самим набором чек-листів.

Ключові перевірки включають:

  • Перевірте, чи пов'язане вступне речення після назви бар'єра.
  • Чи об'єднали субтитри з основним текстом?
  • Перевірити, чи посилання на примітки все ще відповідають правильним позиціям.

Це оцінка результатів доставки, а не висновки внутрішніх алгоритмів OmniDoc. Якщо результат не відповідає вимогам, будь ласка, збережіть оригінальну сторінку та розділ помилок, спочатку визначте, чи проблема пов'язана з ідентифікацією, сортуванням чи перекладом, а потім вирішіть, як її виправити.

❓ Поширені запитання (FAQ)

1. Двоколонковий PDF-серіал — чи його неправильно ідентифікують?

Не обов'язково. Усі символи можуть бути правильно впізнані; проблеми часто лежать у порядку читання, тому спочатку слід перевірити порядок і правила області.

2. sort=True: Чи можете ви безпосередньо вирішити проблему з порядком у двох стовпцях?

Її не можна узагальнювати. Обробка sort залежить від типу виводу та версії. Це не є розумінням макети і не може обіцяти відновлення порядку читання всіх документів. Для сторінок правил можна спробувати спочатку; для сторінок із перерізним контентом також потрібно перевірити регіональні зв'язки.

3. Чому не можна стиснути всю сторінку в довгий рядок?

Після втрати координат і інформації про область подальші переклади отримують лише непов'язаний контекст, і навіть інша модель трансляції може не змогти це виправити.

4. Чи можна безпосередньо застосувати 80 і 300 балів у прикладі до інших PDF?

Ні. Це лише налаштування для цієї композитної сторінки. Коли змінюється розмір сторінки або ширина стовпця, версія правила має бути перевірена і записана окремо для кожної сторінки.

📝 Резюме

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

Досвід зараз: завантажте документ, щоб почати переклад, зберігаючи оригінальне форматування

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