Перейти к содержимому
pdftools.kz
Конвертация

Поиск по PDF не находит слово, которое видно

Внутри страницы нет ни слов, ни пробелов — есть команды поставить шрифт, перейти в точку и нарисовать кусок строки. Слова и промежутки просмотрщик достраивает сам, по расстояниям между кусками. Поэтому поиск спотыкается там, где склейка разошлась с тем, что видит глаз: слово разбито на части, перенесено с дефисом, буква записана двумя знаками или текстового слоя нет вовсе.

Локально в браузередо 1 ГБбез регистрации

Коротко о цифрах

Что на самом деле в файле
команды нарисовать кусок строки в точке, без понятий слова и пробела
Откуда берутся пробелы
из зазора между кусками; подряд идущие пробелы ограничены по числу
Подгружаемые данные
таблицы предопределённых кодировок и данные стандартных шрифтов
Проверка пригодности к правке
три страницы выборки, порог — в среднем пять текстовых элементов на страницу
Языки распознавания сканов
русский, казахский, английский

Пять причин по убыванию частоты

  • Слоя нет. Страница — картинка: скан, фотография или документ после растеризующего сжатия. Искать не в чем, а не «плохо ищется».
  • Слово разбито на куски. Кернинг и выключка заставляют генератор рисовать слово несколькими кусками; просмотрщик склеивает их по зазору, и если зазор был принят за пробел, целое слово не найдётся, а его половина найдётся.
  • Перенос по слогам. Слово физически разорвано дефисом и концом строки — это два куска в разных местах страницы, и они не склеиваются никогда.
  • Нет таблицы соответствия знаков. Глифы нарисованы правильно, но обратного отображения в символы у шрифта нет: поиск и копирование получают чужие коды, а вы видите нормальные буквы.
  • Разная запись одной буквы. Й и Ё существуют и как один знак, и как пара из буквы со значком; е вместо ё встречается сплошь. Сравнение идёт по кодам, а не по внешнему виду.

Диагностика за три действия

  1. Выделите абзац и вставьте его в любое поле ввода. Пусто — слоя нет; каша из символов — сломана таблица соответствия; нормальный текст — идём дальше.
  2. Найдите не всё слово, а его середину из трёх-четырёх букв. Середина находится, целое нет — слово разбито на куски или перенесено.
  3. Проверьте слово без ё и без й: если поиск оживает, дело в разной записи одной и той же буквы.
  4. Прогоните документ через извлечение текста: вы увидите ровно то, что видит поиск, только целиком и в одном месте.
  5. Сравните с исходником в редакторе, если он есть, — там слова хранятся словами, и расхождение сразу видно.

Что делаем мы

Извлечение собирает строку из кусков и ставит пробелы по величине зазора: маленький зазор считается кернингом внутри слова, средний — пробелом, большой — колонкой таблицы. Количество подряд идущих пробелов ограничено, иначе широкий межколоночный промежуток превращал бы файл в поле пробелов. Это те же правила, по которым склеивает просмотрщик, поэтому результат извлечения — честный слепок того, что доступно поиску.

Кроме того, при открытии документа подкладываются таблицы предопределённых кодировок и данные стандартных шрифтов. Без них у файлов, которые ссылаются на встроенные в формат кодировки, текст не извлекается вообще — а выглядит это как «в документе нет текстового слоя», хотя слой есть. Редактор дополнительно проверяет три страницы, первую, среднюю и последнюю, и считает документ пригодным только при среднем количестве текстовых элементов не ниже пяти на страницу.

Чего мы не чиним

  • Сломанную таблицу соответствия знаков: правильные коды в файле отсутствуют, восстановить их можно только распознаванием картинки страницы.
  • Переносы по слогам: разорванное слово останется двумя кусками, потому что так его нарисовал автор документа.
  • Разную запись буквы: нормализацию делает не документ, а тот, кто ищет, и наши инструменты чужой поиск не настраивают.
  • Поиск внутри чужого просмотрщика: у каждого свои правила склейки, и наш результат ничего в них не меняет.

Частые вопросы

Поиск находит половину слова, но не всё слово. Как это возможно?

Слово нарисовано несколькими кусками, и между двумя из них оказался зазор, принятый за пробел. Для просмотрщика это два слова, поэтому половина находится, а целое — нет.

Помогает ли извлечение текста, если поиск не работает?

Помогает понять причину. Вы получаете ровно тот текст, который доступен поиску, и сразу видите, чего в нём нет: слова, разорванного переносом, или всего абзаца, если страница оказалась картинкой.

Почему поиск по одному и тому же файлу работает по-разному в двух программах?

Потому что склейку кусков в слова каждая программа делает по своим порогам зазора. Один просмотрщик считает промежуток кернингом, другой пробелом, и результаты поиска расходятся на одном документе.

Как сделать документ, по которому поиск точно работает?

Выгружайте PDF прямо из редактора, а не через печать в файл, встраивайте шрифты и отключайте автоматический перенос по слогам. Для сканов единственный путь — распознавание, добавляющее текстовый слой под изображение.

Рядом

Частые задачи с этим инструментом