Pdf.js: поиск с помощью ctrl + f не работает с двумя словами

Созданный на 17 мая 2018  ·  4Комментарии  ·  Источник: mozilla/pdf.js

Прикрепите (рекомендуется) или ссылку на файл PDF здесь:
dee752ed0f726d8785abf360ca783d91f96f9a2e.pdf

Конфигурация:

  • Веб-браузер и его версия: Firefox 60 / Chromium 66
  • Операционная система и ее версия: Linux / Windows 7
  • Версия PDF.js: v1.10.88 или v1.9.426 или версия, встроенная в Firefox 60

Шаги по воспроизведению проблемы:

  1. Нажмите ctrl + f и найдите "первопроходец".
  2. Pioneer будет выделен, но как только вы введете пробел, результаты не будут найдены

pdftotext показывает правильный текст:

in nit ris hington 1D C
boerge W lacan a pioneer of butali
and an influential man aw at richfield last walk

Он работает во встроенной программе просмотра PDF-файлов Chrome, поэтому с PDF-файлами проблем не возникает.

Ссылка на программу просмотра (если она размещена на сайте, отличном от mozilla.github.io/pdf.js или как расширение Firefox / Chrome):
https://newspapers.lib.utah.edu/pdfjs1.9/web/viewer.html?file=/udn_files/de/e7/dee752ed0f726d8785abf360ca783d91f96f9a2e.pdf

4-text-selection

Самый полезный комментарий

Я бы с удовольствием поработал над этим,
@timvandermeij Помогите, пожалуйста, с чего начать работу над этой проблемой

Все 4 Комментарий

Я бы с удовольствием поработал над этим,
@timvandermeij Помогите, пожалуйста, с чего начать работу над этой проблемой

Я бы посоветовал сначала проверить, что у нас есть в текстовом слое, потому что это может объяснить, почему поиск не работает. Я предполагаю, что фактор пространства неверен; см. https://github.com/mozilla/pdf.js/blob/7bb066494f3f15c396941c3532b83da6d3465c6b/src/core/evaluator.js#L1303

Скорее всего, это также причина многих других проблем с выделением открытого текста. Однако изменение значения может быть подвержено ошибкам для других файлов PDF и потребует хорошего тестирования. Возможно, нам потребуется проверить, как это делают другие программы просмотра PDF с открытым исходным кодом (например, Poppler), потому что проблема в том, что спецификация PDF не указывает, когда необходимо использовать пространство для выделения текста. Он только определяет ширину интервала между символами.

К сожалению, https://github.com/mozilla/pdf.js/issues/9736#issuecomment -390629834 здесь не поможет, поскольку это отсканированный файл, в котором каждое слово расположено индивидуально с разными размерами шрифта и координатами x / y; см., например, начало потока /Contents :

1 G
1 g
1 0 0 1 52 1145.37 Tm
/F1 11 Tf
(UTAH)Tj
1 0 0 1 90 1146.36 Tm
/F1 11 Tf
(NEWS)Tj
1 0 0 1 29 1124.14 Tm
/F1 10 Tf
(the)Tj
1 0 0 1 44 1126.03 Tm
/F1 8 Tf
(oregon)Tj
1 0 0 1 71 1124.47 Tm
/F1 9 Tf
(short)Tj
1 0 0 1 92 1125.47 Tm
/F1 9 Tf
(line)Tj

...

Привет, ребята, я уверен, что вы знаете, что от этого страдают и другие проекты рендеринга PDF. В настоящее время я использую веб-приложение (Nextcloud), которое использует pdf.js в качестве средства визуализации PDF для своего приложения браузера.

Вот пример файла, с которым я работал в других утилитах. Это отсканированный отрывок из руководства по эксплуатации автопилота самолета, первоначально напечатанного в 1970-х годах на неизвестном оборудовании.

CenturyIIB-origscan.pdf
CenturyIIB-tesseract_hocr-uncleaned.pdf
CenturyIIB-tesseract_hocr-cleaned.pdf

Первый файл - это исходный скан без текстового слоя. Второй (hocr-uncleaned) - это PDF / A, который был обработан с помощью Tesseract (v4.0) для создания скрытого текстового слоя. Третий (hocr-uncleaned) был устранен перекосом с помощью

И во втором, и в третьем случаях опция рендеринга 'hocr' с Tesseract использовалась для этапа рендеринга OCR (Tesseract имеет несколько внутренних рендереров). Если вы посмотрите на форум проблем Tesseract на github, вы увидите, что они внесли некоторые изменения в свой более свежий рендерер, пытаясь решить эту проблему.

Вот несколько отрывков, скопированных / вставленных из различных утилит ...

hocr-unlceaned в Safari 11.1 (13605.1.33.1.4)

The Century IIB Autopilot is an "Open Loop" system which responds only to the dynamics of the aircraft in flight, thus the only ground checks that can be accomplished are functional checks as described in this bulletin.

hocr-uncleaned в Chrome 66.0.3359.181

The Century IIB Autopilot is an "Open Loop" system which responds only to the dynamics of the aircraft in flight, thus the only ground checks that can be accomplished are functional checks as described in this bulletin.

hocr-uncleaned на Adobe Acrobat Pro X

The Century IIB Autopilot is an "Open Loop" system which responds only to the
dynamics of the aircraft in flight, thus the only ground checks that can be
accomplished are functional checks as described in this bulletin.

hocr-uncleaned на pdf.js (Firefox 60.0.1)

Century
IIB
Autopilot
is
an
"Open Loop"
system
which
responds
only
to
the
dynamics
of
the
aircraft
in
flight,
thus
the
only
ground
checks
that
can
be
accomplished
are
functional
checks
as
described
in
this
bulletin.

hocr-cleaned в той же версии Safari, что и выше

The Century IIB Autopilot is an "Open Loop’ system which responds only to the dynamics of the aircraft in flight, thus the only ground checks that can be accomplished are functional checks as described in this bulletin.

hocr-cleaned в той же версии Chrome, что и выше

The Century IIB Autopilot is an "Open Loop’ system which responds only to the
dynamics of the aircraft in flight, thus the only ground checks that can be
accomplished are functional checks as described in this bulletin. 

hocr-cleaned в той же версии Adobe Acrobat Pro, указанной выше

The Century IIB Autopilot is an "Open Loop’ system which responds only to the
dynamics of the aircraft in flight, thus the only ground checks that can be
accomplished are functional checks as described in this bulletin.

hocr-cleaned в той же версии pdf.js (Firefox) выше

Century 
IIB 
Autopilot 
is 
an 
"Open 
Loop’ 
system 
which 
responds 
only 
to 
the 
dynamics 
of 
the 
aircraft 
in 
flight, 
thus 
the 
only 
ground 
checks 
that 
can 
be 
accomplished 
are 
functional 
checks 
as 
described 
in 
this 
bulletin. 

Для тех, кто может захотеть воспроизвести мою инструментальную цепочку для других файлов примеров ( main / _depedency _) ...

tesseract 4.00.00alpha (для OCR)
_leptonica 1.76.0
libjpeg-turbo 1.5.3
libpng 1.6.34 + apng
libtiff 4.0.9_

unpaper 6.1 (для
_libav 12.1
opencv 2.4.13.1
freetype2 2.8_

qpdf 8.0.1 (для просмотра / модификации / создания PDF-файлов)
_ghostscript 9.16_

OCRmyPDF 6.2.0 (оболочка python v3 для вышеуказанных утилит)

Все вышеперечисленное есть практически в любом распространенном репозитории пакетов Linux, OCRmyPDF находится в pip, и все современные сборки также находятся в Homebrew для OSX (tesseract должен быть привязан к их git HEAD, поскольку v4.0 все еще помечен как бета) . Я также запускал их все на FreeBSD (нужно собрать Tesseract, Leptonica и unpaper из исходников). На мой взгляд, Tesseract / Leptonica - отличная база для создания таких тестовых файлов. Они семимильными шагами продвинули OCR с открытым исходным кодом. Вот пример из отсканированного документа 18 века, с которым он даже отлично справляется, несмотря на то, что он не знает, что такое «длинные S», и транскрибирует их в строчные «f».

Была ли эта страница полезной?
0 / 5 - 0 рейтинги