PDF-файл можно просмотреть, но нельзя скопировать. Возможно, это не сканирование: сначала проверьте текстовый слой и сопоставление символов.
Если текста нет, его нельзя напрямую оценить как «текстовый слой нормальный», а также нельзя напрямую оценить как отсканированную копию. Текст, альтернативные символы и ссылки на изображения страниц записываются ниже соответственно, и выводится статус, подлежащий проверке; ссылки на изображения не доказывают, что изображение занимает всю страницу или что текст можно идентифицировать.
Если вы видите текст в PDF-файле, но не можете его скопировать, возможно, это не отсканированная копия или возникла проблема с сопоставлением символов. Эта статья написана для разработчиков и обработчиков документов, которым необходимо извлекать, переводить или структурировать содержимое PDF. Прочитав, вы узнаете, как в первую очередь различать проблемы на уровне текста и изображения, а также использовать унифицированные сигналы, чтобы определить, что делать дальше.
В коде и примерах здесь используются синтетические образцы, прошедшие выборочные проверки в изолированной среде и не являющиеся гарантией работоспособности всех реальных файлов или продукта. Перед обработкой важных документов, пожалуйста, сохраните оригиналы и просмотрите их по границам и пунктам приема в тексте.
PDF-файл можно просмотреть, но нельзя скопировать. Это сканированная копия? Вывод в одно предложение
Не могу судить напрямую. Сначала проверьте текстовый слой и сопоставление символов, затем посмотрите на изображение страницы и, наконец, определите, является ли это ошибкой сканирования или сопоставления.
| твоя ситуация | Рекомендуемый рецепт | Причина |
|---|---|---|
| Он может видеть текст и копировать искажённый или пустой текст | Проверьте отображение и кодирование шрифтов в ToUnicode | Визуальное изображение нормальное, но текстовый слой поврежден, в основном из-за отсутствия или неправильного сопоставления. |
| Скопированные иероглифы кажутся разумными, но имеют неверные значения | Сравните результаты извлечения с визуальным содержанием | Эвристическое сопоставление может выводить неправильные символы и проходить проверку на ненулевое значение. |
| Текста нет, но на странице есть картинки | Проверьте, содержит ли изображение текст, затем определите, нужен ли OCR | Цитирование изображения не равносильно сканированию всей страницы и не доказывает, что текст может быть распознан |
| Ни текст, ни изображения не были обнаружены | Просмотр чертежей страниц | На основе этого невозможно сделать вывод, что страница пуста |
Почему текст искажен?
Пользователи обычно видят текст в браузерах или ридерах, но скопированный текст искажен, пуст или нерелевантный символ. Обычно это не повреждённый файл и не обязательно сканирование. Коренная причина заключается в отсутствии или неправильных глифах в PDF с таблицами сопоставления Unicode (ToUnicode CMap).
Движки рендеринга используют индексы глифов для отображения визуального контента, тогда как буферы обмена и инструменты извлечения текста используют таблицы отображения для восстановления семантических символов. Когда оба сломаются, появляется «визуально нормальный, нечитаемый машиной» слой плохого текста.
Перед переводом документов или структурированным извлечением нужно сначала убедиться, заключается ли проблема в отображении или сама страница — это изображение. В противном случае последующие процессы OCR или NLP будут строиться на неправильных основаниях.
Механизм разрыва между индексами глифов и отображениями Unicode
Спецификация PDF позволяет встраивать только информацию о контурах и ширине глифов без включения карты кодирования символов. Следующие ситуации могут привести к перелому:
- Программное обеспечение, генерирующее PDF, неправильно записывает таблицу ToUnicode.
- Используется пользовательская кодировка, но правила декодирования не указаны.
В этот момент экстрактор может получить только оригинальный идентификатор глифа (CID). Эти идентификаторы имеют значение для рендереров, но не имеют ценности для обработки текста.
Некоторые инструменты используют эвристические алгоритмы для угадывания отображений, в результате чего появляются символы, которые кажутся разумными, но на самом деле неверны, например, преобразование китайской пунктуации в латинские буквы или замена чисел на контроллеры. Такой «псевдотекст» ещё более скрыт, чем чистые пустые пространства, потому что он может пропускать непустые проверки, но затем вызывает тихое загрязнение данных.
Ключ к оценке таких задач — не выбор текста, а проверка семантического соответствия извлеченной строки визуальному содержанию.
Использование PyMuPDF для диагностики синтеза памяти
Следующий код формирует вход в памяти и проверяет логику диагностики:
from io import BytesIO
from PIL import Image
import pymupdf
def inspect(page):
text = page.get_text().strip()
images = page.get_images()
if "\ufffd" in text:
state = "review_replacement_characters"
elif text:
state = "text_present_needs_semantic_review"
elif images:
state = "image_without_extracted_text"
else:
state = "empty_text_needs_review"
return {"state": state, "characters": len(text), "image_refs": len(images)}
with pymupdf.open() as doc:
doc.new_page().insert_text((50, 50), "Text sample")
doc.new_page()
picture = BytesIO()
Image.new("RGB", (16, 16), "red").save(picture, format="PNG")
doc.new_page().insert_image(pymupdf.Rect(10, 10, 100, 100), stream=picture.getvalue())
assert inspect(doc[0])["state"] == "text_present_needs_semantic_review"
assert inspect(doc[1])["state"] == "empty_text_needs_review"
assert inspect(doc[2])["state"] == "image_without_extracted_text"
assert inspect(doc[2])["characters"] == 0
В приведённом выше коде функция diagnose_text_layer получает исходный текст через get_text("text"), использует unicodedata.category для фильтрации управляющих символов и пробелов, а также вычисляет долю допустимого содержимого. Одновременно он обнаруживает наличие блоков изображений через get_text("blocks").
Оба утверждения подтверждают два сценария: скорость печати обычного документа превышает 0,9, а количество символов отсканированного документа равно нулю. Это охватывает основную логику ветвления.
Следует отметить, что этот диагноз основан исключительно на статистических характеристиках. Для зашифрованных шрифтов или специальных кодировок требуется ручная проверка.
📊 Сравнение ядра
В таблице ниже перечислены направления проверки, соответствующие различным сигналам, а также выводы, которые не следует делать:
| Сигнал | Следующий шаг — проверить | Выводы, которые не следует делать |
|---|---|---|
| Есть текст для печати | Проверьте семантику, порядок и источники | Если вы можете извлечь его, значит, он правильный |
| Есть альтернативные персонажи | Пересмотрите кодирование и отображение шрифтов | Все персонажи потеряны |
| Есть фотографии, но нет текста | Проверьте, содержит ли изображение текст | Должно быть, это полностраничный скан |
| Ни текст, ни изображения не были обнаружены | Просмотр чертежей страниц | Должно быть, это чистая страница |
🎯 Какой способ тебе подходит?
Если вы видите текст, но не можете его скопировать
В первую очередь проверяйте отображения и кодировки шрифтов в ToUnicode, которые обычно возникают из-за разрывов карт.
Если скопированный текст выглядит нормально, но содержит ошибки,
Используйте визуальный контент для сравнения и извлечения результатов по абзацам; не просто смотрите на то, не является ли он нулевым.
Если на странице только изображения и нет текста
Проверьте, содержит ли изображение текст, затем решите, нужен ли OCR. Не думайте, что вся страница — это скан.
Если вы готовитесь к переводу документов
Сначала пройдите проверку целостности текста, затем передайте десенсибилизированный образец в процесс перевода.
Используйте этот чек-лист для перевода документов
Сначала тщательно проверьте порядок страниц, местоположение источника и целостность текста, затем отправьте тот же образец десенсибилизации в процесс перевода. После перевода всё равно необходимо проверить, совпадают ли заголовок, основной текст и подписи; недостаточно судить только по плавности текста.
OmniDoc (запись продукта) предоставляет многоформатный портал перевода документов, а официальный сайт включает OCR, глоссарии и двуязычные справочные функции. Если хотите начать напрямую с файла, можно оценить этот путь с помощью реальных образцов.
Пожалуйста, используйте файл тревоги, на который имеете право загрузить, и проверьте результаты чек-листа в этой статье. Это не означает, что OmniDoc использует открытые библиотеки или внутренние алгоритмы, упомянутые в этой статье, и не заменяет тестирование производительности продукта примерами.
❓ Часто задаваемые вопросы (FAQ)
1. Если вы можете извлечь текст, значит ли это, что текстовый слой правильный?
Нет. Извлечённое содержимое также необходимо проверить на семантику, порядок и источник, и если отображение некорректно, может появиться кажущиеся разумные символы.
2. Если на странице есть изображения, значит ли это, что это скан?
Не обязательно. Ссылки на изображения не доказывают, что изображение покрывает всю страницу, и не доказывают, что текст можно распознать; нужно проверить, содержит ли изображение текст.
3. Если ни текст, ни изображения не обнаружены, значит ли это, что страница пустая?
На основании этого вывода сделать нельзя. Вам стоит проверить рендеринг страницы, прежде чем принимать решение.
4. Можно ли использовать этот диагностический скрипт для всех PDF?
Нет. Он основан исключительно на статистических характеристиках; зашифрованные шрифты или специальные кодировки всё ещё требуют ручной проверки.
📝 Краткое содержание
PDF-файлы можно читать, но не копировать; сначала проверьте текстовые слои и сопоставления символов, затем изучите содержимое изображения и, наконец, определите, является ли это отсканированной копией. Перед оформлением сохраняйте оригиналы документов и проверяйте каждый пункт вместе с материалами для инспекции.
Опыт сейчас: загрузите документ, чтобы начать перевод, сохраняя оригинальное форматирование


