Почему текст, скопированный из PDF, всегда получается искажённым?
Вы нашли в PDF полезный фрагмент и хотите добавить его в заметки, отправить коллеге или использовать как материал для следующего вопроса. Выделить, скопировать, вставить — это должно занять всего несколько секунд.
Но после вставки одно предложение разбивается на несколько строк, английское слово обрывается посередине, а номера страниц оказываются внутри абзаца. Вы хотели взять небольшой фрагмент, а теперь снова и снова нажимаете Backspace.
Если порядок чтения правильный и проблема только в разрывах строк, сначала объедините одиночные переносы внутри абзацев, сохранив пустые строки между абзацами. Заголовки, списки и дефисы в конце строк нужно проверять отдельно. Если предложения из двух колонок перемешались, сначала исправьте порядок копирования, а не удаляйте переносы напрямую.
Одна строка на странице не обязательно является абзацем в тексте
На странице PDF предложение переносится, когда доходит до правого края. Такой визуальный перенос может быть связан только с размером страницы или шириной колонки; это не обязательно означает начало нового абзаца.
При копировании программа должна заново собрать текст со страницы в один поток, но не всегда различает эти два типа переносов. В описании извлечения текста pdfminer.six показано, как по положению и расстоянию между символами объединять их в строки и текстовые блоки. Содержимое, которое выглядит связанным на странице, после копирования всё равно может разделиться.
Рассмотрим несколько простых примеров и способы их обработки.
Соединяйте предложения, но сохраняйте абзацы
Начнём со сравнительно безопасного случая: каждый абзац разбит на две строки, но между абзацами сохранилась пустая строка.
Текст до обработки:
We copied a paragraph
from the report into our notes.
The original page remains available
for checking names and numbers.Поместите этот текст в iSomor Text Cleaner и выполните три шага:
- Вставьте текст. Сначала добавьте небольшой фрагмент в поле «Исходное содержимое», сохранив пустые строки между абзацами.
- Выберите параметры и обработайте текст. Включите «Объединить одиночные переносы» и «Нормализовать пробелы». Пока не включайте «Соединять слова, разделённые в конце строки», затем нажмите «Обработать текст».
- Проверьте результат. Сравните обе версии, убедитесь, что абзацы и слова не соединились неправильно, затем скопируйте текст или скачайте TXT.
Результат инструмента:
We copied a paragraph from the report into our notes.
The original page remains available for checking names and numbers.Перенос внутри предложения исчез, а разделение между двумя абзацами осталось. Пробелы между английскими словами также сохранились: paragraph и from не слились.
В этом примере одиночный перенос находится внутри абзаца, а пустая строка обозначает границу абзацев. Если после копирования между абзацами тоже остался только один перенос, сверьтесь с оригиналом и добавьте пустую строку перед обработкой.
Не удаляйте все дефисы в конце строк
В английском документе слово может быть разделено в конце строки из-за вёрстки. Например:
The trans-
lation is ready for review.Здесь trans- и lation — части одного слова. Если включить «Соединять слова, разделённые в конце строки», инструмент выдаст:
The translation is ready for review.Но похожий внешний вид не всегда означает одинаковую обработку. Рассмотрим слово, которое изначально было написано как cross-validation:
We used cross-
validation to compare the models.При включённой опции результат будет таким:
We used crossvalidation to compare the models.Перенос исчез, но вместе с ним удалился и значимый дефис. В этом случае нужно сохранить cross-validation.
Поэтому сначала лучше не включать объединение переносов внутри слов. Используйте его только после того, как убедитесь, что слово действительно было разделено из-за вёрстки. Если в материале есть составные слова или номера моделей, сначала обработайте обычные переносы, а дефисы проверьте по одному.
Заголовкам и спискам нужно немного пространства
Не всё, что занимает отдельную строку, нужно соединять со следующей строкой.
Например, в следующем фрагменте первая строка — заголовок, затем идут пояснение и список:
Preparation
Keep the original PDF first.
- Check names
- Check dates
- Check amountsЕсли включить «Объединить одиночные переносы» и «Нормализовать пробелы», инструмент фактически выдаст:
PreparationKeep the original PDF first.
- Check names
- Check dates
- Check amountsСписок с маркерами - сохранён, но заголовок соединился с основным текстом. После превращения «Preparation» в обычный текст без размера шрифта и жирного начертания одного переноса недостаточно, чтобы распознать заголовок.
В таких материалах добавьте пустую строку после заголовка перед обработкой. При тех же параметрах получится:
Preparation
Keep the original PDF first.
- Check names
- Check dates
- Check amountsПустая строка разделяет заголовок и текст. Сложные вложенные списки, таблицы и формулы лучше обрабатывать отдельно, не объединяя их с обычными абзацами одним запуском.
Если порядок уже нарушен, не спешите обрабатывать переносы
Если после предложения из левой колонки идёт текст из правой или номер страницы оказался внутри предложения, удаление переносов не исправит порядок чтения. Сначала вернитесь к этапу копирования:
- Две колонки перемешались: Попробуйте выбирать и копировать по одной колонке или небольшому фрагменту, затем проверьте порядок вставки. Если программа всё равно смешивает колонки, используйте другой способ извлечения.
- Смешались колонтитулы или номера страниц: Сравните с исходной страницей и удалите только подтверждённые вставки. Не удаляйте массово все строки с цифрами: это может быть номер раздела или данные основного текста.
- Таблица превратилась в строку текста: Проверьте заголовки, единицы измерения и соответствие строк и столбцов, прежде чем помещать её в обычную текстовую заметку. Меньше пробелов не означает, что таблица восстановлена.
- Скопированный текст превратился в нечитаемые символы: Отдельно проверьте текстовый слой или кодировку шрифта. Очистка формата не исправляет такие символы.
- В отсканированном изображении нет выделяемого текста: Сначала нужен OCR. Даже готовый OCR-слой может содержать ошибки распознавания: возможность копирования не доказывает точность текста. В документации pypdf различаются PDF с исходным текстом, сканы только из изображений и PDF со слоем OCR. Источник текста у них разный.
Перед использованием результата проверьте эти места
После обработки небольшого фрагмента особенно внимательно посмотрите на места, которые легко меняются:
- Правильно ли начинаются и заканчиваются абзацы?
- Не слились ли английские слова и сохранились ли значимые дефисы?
- Отделены ли по-прежнему заголовки и списки?
- Не пропали ли числа, единицы, знаки минуса и символы формул, не сместились ли они?
Если в отрывке есть китайская пунктуация, проверьте и пробелы рядом с ней. В нашем тесте после объединения переноса после запятой остался лишний пробел, который пришлось удалить вручную. Сначала убедитесь, что способ подходит для этого фрагмента, и только потом применяйте его к похожим материалам.
Если вы собираетесь цитировать этот фрагмент, сохраните название документа, номер страницы или ссылку и сверьте текст с источником.
Обработка нужна, чтобы вернуться к своей задаче
Очистка текста помогает убрать повторяющиеся переносы и лишние пробелы, а не сжать всё в один абзац. Когда основной текст соединён, а заголовки и списки по-прежнему разделены, результат удобнее использовать дальше.
iSomor показывает исходное содержимое и результат рядом, чтобы было видно, что изменилось. После проверки можно вернуться к заметкам, цитатам и обсуждению и снова сосредоточиться на том фрагменте, который вы хотели использовать.