Прикрепите (рекомендуется) или ссылку на файл PDF здесь:
dee752ed0f726d8785abf360ca783d91f96f9a2e.pdf
Конфигурация:
Шаги по воспроизведению проблемы:
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
Я бы с удовольствием поработал над этим,
@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».
Самый полезный комментарий
Я бы с удовольствием поработал над этим,
@timvandermeij Помогите, пожалуйста, с чего начать работу над этой проблемой