Что делать с CID в тексте, извлеченном PDFMiner? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть несколько PDF-файлов на хинди, которые содержат извлекаемый текст.Я использовал pdfminer.six для Python 3.6, чтобы сделать извлечение.Вывод выглядит следующим образом:
enter image description here

Как видно, существует ряд символов, которые преобразуются в форму "(cid: number)".

При дальнейшем анализе я обнаружил, что PDF содержит CMAP, которые отображают коды символов в индексы глифов.Итак, CID - это идентификатор символа для глифа, с которым он сопоставлен, внутри таблицы CMAP.

Но как эти коды символов связаны со значениями Unicode?В основном, как средство просмотра PDF может показать глиф, используя это отображение?

Более того, согласно комментарию к этому подобному вопросу, этот процесс может быть не законным.Но я не пытаюсь украсть чей-то шрифт.Я хочу текст.Как этот процесс становится незаконным?

Поскольку существует много подобных вопросов, я хочу уточнить, что я не ставлю своей целью решение проблемы "cid".Я хочу уточнить причины проблемы и причины ее незаконности.

РЕДАКТИРОВАТЬ: Это проблемы страница для pdfminer обсуждает этопроблема, где автор четко говорит, что, кажется, нет надежного обходного пути для этой проблемы.Есть ли какое-то общее базовое ограничение (например, отсутствие доступа к шрифту), которое делает эту проблему постоянной?

1 Ответ

0 голосов
/ 10 июня 2018

Но как эти коды символов связаны со значениями Unicode?По сути, как средство просмотра PDF может отображать глиф с использованием этого сопоставления?

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

В PDF шрифт имеет отображение (или последовательность отображений) из кода символа вИдентификатор глифа в программе шрифтов, и это отображение может быть совершенно произвольным.

Например, в случае встроенных подмножеств шрифтов программа шрифтов подмножества часто создается путем предоставления первому используемому на странице глифа начального идентификатора глифа n , затем задайте второй, другой глиф на идентификаторе этой страницы n + 1 , затем следующий, другой идентификатор глифа n + 2 и т. д., и т. д., а затем символкоды часто идентичны идентификаторам глифов, т.е. приведенное выше отображение является отображением идентификаторов.Если больше нет никакой дополнительной информации, экстрактор текста не имеет возможности правильно выполнить свою работу.

Я хочу уточнить причины проблемы

Регулярное извлечение текстаобычно имеет следующие параметры для поиска значения Unicode для кода символа:

  • шрифт PDF может включать карту ToUnicode (отображение изкод символа в Unicode) для поддержки таких операций, как поиск строк или копирование и вставка в программе просмотра PDF.Эта карта незамедлительно обеспечивает отображение потребностей экстрактора текста.

    Осторожно, однако: эти ToUnicode карты могут быть неполными и иногда даже содержать намеренно неправильные отображения!

  • Определение кодировки шрифта PDF может содержать имя предварительно определенной стандартной кодировки (например, WinAnsiEncoding или GBpc-EUC-H * ​​1040 *) или стандартизированное имя символа (например, * 1041).* пробел , семь или ntilde ) для данного кода.Экстрактор текста просто должен знать кодировку, представленную этим именем кодировки, или код, представленный этим символьным именем.

    Но Кодировка также может быть тождеством ( Identity – H). и Identity – V с код символа = код глифа ), который ничего не выдает, и имя символа также может быть нестандартизированным (например, g17).

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

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

На самом деле есть еще несколько мест для поиска дополнительной информации, например, программа шрифта может включать собственное отображение своих символов в Unicode, но эта дополнительная информация также является необязательной..

... и причины его незаконности.

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

С другой стороны, если, например, у вас была идея создать ToUnicode сопоставляет те шрифты, у которых отсутствует такая карта, рисуя каждый глиф шрифта на растровом изображении, отделенном от всего остального и применяя к нему OCR, вы, как получатель PDF, неожиданно используете программу шрифтовнарисовать что-то еще, кроме исходного документа, и это может рассматриваться как использование, на которое не распространяется лицензия.

...