Копирование + вставка текста из PDF приводит к мусору - PullRequest
10 голосов
/ 28 мая 2010

Я пишу магистерскую диссертацию - система НЛП. У меня есть один компонент - экстрактор.

Извлекает простой текст из файлов PDF. Есть несколько файлов PDF, которые не могут быть извлечены правильно. Extractor (библиотека PDFBox) возвращает строку, подобную этой:

"DxDn║if | d├gDF" Ti & cD╬lh d FÁhis ~ n ╗xd f «" d┤ffih »h"

или

"10a61a91a22a25a3a27a17a23a20a8a13a14a61a25a17"

Я проверял каждый файл, который создает проблему для этого извлечения, и текст всех этих файлов также не может быть скопирован из PDF Reader (Adobe Reader и FoxIt reader). Просмотр их в этом ридере включен, но после выбора его содержимого и копирования в буфер обмена я получаю тот же неверный текст (как описано выше - строки не семантически правильных символов или строки цифр и букв).

Может ли кто-нибудь мне помочь ???

Ответы [ 7 ]

6 голосов
/ 28 мая 2010

Если вы можете успешно выбрать и скопировать текст в Adobe Reader - указано, что PDF-файл содержит текстовые объекты - но вы не можете вставить скопированный текст в Блокнот, если он не похож на кучу мусорных символов, проблема, вероятно, связана с CMap, который использует выбранный текст.

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

Я предполагаю, что либо CMap для этого текста поврежден, либо библиотека PDFBox не поддерживает этот конкретный CMap. Я предлагаю попробовать другой SDK только для того, чтобы увидеть, есть ли у вас другие результаты.

4 голосов
/ 21 июня 2011

Очень часто в таких случаях, когда вы не можете выделить, копировать и вставлять текст из окна Acrobat (Reader), есть еще одна опция, которая все же может работать:

  • Открыть Меню 'Файл' ,
  • выберите 'Сохранить как ...' ,
  • выберите 'Текст (обычный) (* .txt)' ,
  • перейдите в целевой каталог,
  • введите имя, которое вы хотите использовать для текстового файла.

У вас будет весь текст со всех страниц в файле, и вам нужно будет найти место, которое вы изначально хотели скопировать и вставить, поскольку это не так удобно, как прямое копирование и вставка. Но работает надежнее ....

Он также работает с acroread в Linux (но вы должны выбрать 'Сохранить как текст ...' в меню файла).

Обновление

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

Вот пример выходных данных, который демонстрирует, где, скорее всего, возникнет проблема с извлечением текста. Он использует один из этих файлов PDF с ручной кодировкой из GitHub-Repository , который был создан для предоставления примеров файлов PDF, которые хорошо комментируются и могут быть легко открыты в текстовом редакторе:

$ pdffonts  textextract-bad2.pdf
  name                            type         encoding    emb sub uni object ID
  ------------------------------- ------------ ----------- --- --- --- ---------
  BAAAAA+Helvetica                TrueType     WinAnsi     yes yes yes     12  0
  CAAAAA+Helvetica-Bold           TrueType     WinAnsi     yes yes no      13  0

Как интерпретировать эту таблицу?

  • В приведенном выше PDF-файле используются два заданных шрифта (как указано префиксами BAAAAA+ и CAAAAA+ к их именам, а также записями yes в столбце sub), Helvetica и Helvtica-Bold.
  • Оба шрифта имеют тип TrueType.
  • Оба шрифта используют кодировку WinAnsi (кодировка шрифта отображает идентификаторы символов, используемые в исходном коде PDF, на глифы, которые должны быть нарисованы). Однако только для шрифта /Helvetica в PDF имеется таблица /ToUnicode (для /Helvetica-Bold ее нет), как указано yes / no в столбце uni).

Таблица /ToUnicode необходима для обеспечения обратного сопоставления символьных идентификаторов / кодов с символами.

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

1 голос
/ 28 февраля 2016

При открытии в виде вложения Gmail в Chrome (внутренний PDF-браузер) копирование копирует обычные читаемые символы!

Это сработало для меня, когда у меня была эта проблема, и для других . Я думаю, что Chrome PDF Viewer использует Google Drive OCR автоматически ... Это как волшебство!

1 голос
/ 28 мая 2010

С чем был создан PDF. Некоторые PDF-файлы не содержат никакой информации о кодировке, только данные для ее рисования. Таким образом, нет возможности извлечь данные.

0 голосов
/ 01 августа 2016

Лучший способ справиться с этим (при условии, что у вас есть Adobe Acrobat или что-то подобное, но не уверен, что Reader сможет это сделать) - сохранить документ в формате JPEG. Затем перекомпилируйте все изображения в один PDF-файл, затем используйте функцию OCR для поиска текста на страницах, затем вы можете скопировать и вставить текст.

0 голосов
/ 17 мая 2013

Выберите текст, который вы хотите скопировать. Щелкните правой кнопкой мыши Выберите опцию «Экспортировать выделение как» В диалоговом окне выберите имя файла и сохраните новый файл в формате RTF. Откройте RTF, чтобы увидеть ваш текст!

0 голосов
/ 28 мая 2010

PDF не является текстовым документом. Это скорее векторный графический формат, который иногда может содержать текст. Так что есть некоторые документы, из которых вы не можете извлечь текст, если вы не хотите делать OCR. Так оно и есть.

...