OCR и извлечение текста — разные операции
Извлечение читает символы, которые уже записаны в файле, и ошибиться в них не может: буква «щ» была сохранена как «щ» и вернётся как «щ». Распознавание работает там, где символов нет ни одного, и восстанавливает их по картинке — то есть всегда приблизительно. Первое считается в браузере за доли секунды на страницу, второе идёт на сервере по 2–5 секунды. Путают их постоянно, а выбирать нужно по одному признаку: есть в файле текстовый слой или нет.
Коротко о цифрах
- Извлечение
- читает готовые символы, ошибок распознавания нет
- Распознавание
- создаёт символы по картинке, всегда приблизительно
- Где считается
- извлечение — в браузере, распознавание — на сервере
- Скорость
- извлечение — доли секунды на страницу, распознавание — 2–5 с
- Признак для выбора
- выделяется ли абзац мышью в просмотрщике
- Нормализация при извлечении
- NFKC: лигатура fi и разложенная ә склеиваются в один символ
Две операции рядом
- Извлечение: вход — PDF с текстовым слоем, выход — TXT, точность полная, обработка целиком в браузере.
- Распознавание: вход — скан без слоя, выход — тот же PDF со слоем, точность зависит от качества скана, обработка на сервере.
- Извлечение не меняет исходный файл, распознавание возвращает новый — с добавленным невидимым слоем.
- Извлечение работает с документом любого объёма в пределах гигабайта, распознавание ограничено 20 страницами и 30 МБ.
- У извлечения нет очереди и лимита обращений, у распознавания есть и то и другое, потому что оно тяжёлое.
Как за минуту понять, что у вас за файл
- Откройте PDF и попробуйте выделить абзац мышью. Строки подсвечиваются — слой есть.
- Если вместо строк тянется прямоугольная рамка поверх страницы, перед вами картинка.
- Сомневаетесь — прогоните файл через извлечение текста: пустой результат подтверждает отсутствие слоя.
- Смешанный случай тоже бывает: несколько страниц с текстом и остальные сканы. Тогда нужны обе операции.
- После распознавания извлечение начнёт работать на том же файле — теперь ему есть что читать.
Что происходит внутри каждой из них
Извлечение обходит страницы и собирает текстовые элементы, которые в них записаны, вместе с координатами. Переносы строк берутся из самого документа, а не угадываются: pdfjs помечает последний элемент каждой визуальной строки, и мы это учитываем. Результат нормализуется по NFKC, поэтому лигатура fi становится обычным «fi», а казахская ә, записанная как «а» с отдельным диакритическим знаком, склеивается в один символ — иначе поиск по скачанному файлу вёл бы себя странно.
Распознавание не читает файл, оно смотрит на пиксели. Каждая страница растеризуется, по картинке ищутся области текста и формы букв, и получившиеся символы записываются прозрачным слоем под изображение. Отсюда все свойства результата: он зависит от разрешения, от языка, от шрифта и от того, ровно ли лежал лист, — и его обязательно нужно проверять, тогда как результат извлечения проверять не нужно.
Частые вопросы
Извлечение текста вернуло пустой файл. Инструмент сломался?
Нет, он отработал правильно и сообщил, что читать нечего. Пустой результат означает отсутствие текстового слоя, то есть перед вами скан — и здесь нужна другая операция, распознавание.
Можно ли распознать документ, в котором текст уже есть?
Смысла нет: страницы с готовым текстом пропускаются нетронутыми, и файл вернётся к вам без изменений. Хуже того, вы потратите обращение из лимита на работу, которая гарантированно ничего не добавит.
Почему извлечение бесплатно и мгновенно, а распознавание нет?
Извлечение — это чтение уже готовых данных, оно укладывается в доли секунды прямо во вкладке браузера. Распознавание растеризует каждую страницу и прогоняет её через модель, а это секунды процессорного времени и сотни мегабайт памяти на сервере.
Что делать, если часть страниц текстовые, а часть — сканы?
Отправьте документ на распознавание целиком: текстовые страницы будут пропущены, сканы получат слой. После этого извлечение соберёт текст со всего файла, и вам не придётся разделять его на части.