Анализ pdf (скрипт деванагари) с использованием PDFminer дает неправильный вывод

Я пытаюсь разобрать PDF-файл, содержащий список индийских избирателей на хинди (скрипт деванагари).

PDF отображает весь текст правильно, но когда я попытался сбросить этот pdf в текстовый формат с помощью PDFminer, он вывел символы, которые отличаются от исходных символов pdf

Например, отображаемое/правильное слово सामान्य

Но выходное слово सपमपनद

Теперь я хочу знать, почему это происходит и как мне правильно разобрать этот тип файла PDF.

Я также включаю образец файла PDF-

http://164.100.180.82/Rollpdf/AC276/S24A276P001.pdf


person Rohit    schedule 07.08.2015    source источник
comment
@mkl Итак, я видел ваш ответ в другой ветке, и, согласно ему, сопоставление юникода / информация не работает, я пробовал с другим похожим на него PDF-файлом, и все было в порядке. Нет ли другого способа, кроме оптического распознавания этого PDF-файла?   -  person Rohit    schedule 07.08.2015
comment
Файлы, в которых эта информация повреждена, обычно не могут быть легко извлечены из текста. В зависимости от характера проблемы это иногда возможно. Например. если информация Unicode в формате PDF повреждена, но не во встроенных шрифтах. Однако, насколько я помню, в случае с этим другим вопросом оба типа были нарушены.   -  person mkl    schedule 07.08.2015
comment
@mkl Я не получил часть, например. если информация Unicode в форме PDF повреждена, но не во встроенных шрифтах.. ? Как проверить это в моем случае 164.100.180.82/Rollpdf/AC276/S24A276P001.pdf   -  person Rohit    schedule 07.08.2015
comment
И еще одно: как мой читатель PDF может отображать правильные символы, несмотря на то, что сопоставление нарушено?   -  person Rohit    schedule 07.08.2015
comment
Я не понял часть... - если в PDF-файле используется нестандартный шрифт, он часто встраивается, по крайней мере, подмножество глифов, которые фактически используются в PDF-файле. В таком случае информация о том, какой глиф соответствует какому символу Unicode, может быть как в исходном формате PDF, так и во встроенных данных шрифта. Если любой из них не поврежден, можно использовать это сопоставление для извлечения текста.   -  person mkl    schedule 07.08.2015
comment
И еще кое-что... - есть сопоставление идентификатора символа с глифом шрифта. Это отображение работает. Но этот идентификатор персонажа изначально мог быть выбран произвольно. Для извлечения текста требуется сопоставление идентификатора символа с Unicode или глифа шрифта с Unicode. Один сломан, второй нужно проверить.   -  person mkl    schedule 07.08.2015
comment
Большое спасибо @mkl, вы просто отлично объяснили! Теперь, если я вас не сильно беспокою, не могли бы вы дать мне способ, чтобы я мог сам проверить сопоставление, правильное оно или нет?   -  person Rohit    schedule 07.08.2015
comment
можете ли вы дать мне способ, чтобы я мог проверить сопоставление самостоятельно - я бы проверил встроенные шрифты с помощью подделки шрифтов и проверил некоторые глифы, для которых сопоставление в формате PDF неверно.   -  person mkl    schedule 08.08.2015
comment
@mkl Я пытался, но ничего не смог, ты можешь проверить это, как только доберешься до офиса и сегодня у тебя будет свободное время?   -  person Rohit    schedule 09.08.2015
comment
Эй, ты смог решить эту проблему? Я тоже застрял на этой проблеме. Хотя я могу понять, что @mkl хотел передать, но как решить проблему, все еще не ясно   -  person proprius    schedule 23.10.2015
comment
@VirajNalawade Кто-нибудь нашел лучший способ получить правильный вывод? Пожалуйста, поделитесь своим мнением. Спасибо.   -  person Niks Jain    schedule 22.11.2017


Ответы (1)


Эта проблема очень похожа на ту, что обсуждалась в этом ответе, и внешний вид пример документа здесь также напоминает документ здесь.

Как и в случае с документом в другом вопросе, карта ToUnicode шрифта сценария деванагари, используемого в этом документе, сопоставляет несколько совершенно разных глифов с идентичными кодовыми точками Unicode. Таким образом, извлечение текста на основе этого сопоставления обречено на неудачу, и большинство средств извлечения текста полагаются на эту информацию, особенно при отсутствии записи шрифта Кодировка, как здесь.


Некоторые экстракторы текста могут использовать сопоставление глифа с Unicode, содержащееся во встроенной программе шрифтов (если она присутствует). Но проверка этого сопоставления в программе шрифтов Devanagari, используемой в этом документе, показывает, что она связывает большинство глифов с U+f020 по U+f062 с именем «uniF020» и т. д.

Компактный UnicodeBmp

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

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


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

Таким образом, если вы найдете экстрактор текста, который либо возвращает идентификатор символа (игнорируя все карты toUnicode), либо возвращает кодовые точки Unicode для частной области использования из программы шрифта, вы можете использовать его вывод и просто заменить каждую запись в соответствии с несколькими картами.


Я еще не использовал такой экстрактор текста, поэтому я ничего не знаю в контексте Python. Но кто знает, возможно, pdfminer или любому другому подобному пакету можно указать (некоторым образом) игнорировать вводящую в заблуждение карту ToUnicode, а затем использовать, как описано выше.

person mkl    schedule 10.08.2015
comment
Спасибо .. Я понял то, что вы здесь объясняете .. Не могли бы вы рассказать, как обновить ToUnicode в pdfquery или pdfminer? Любая другая библиотека может мне помочь? Спасибо еще раз. у меня такая же проблема.. - person Niks Jain; 22.11.2017
comment
К сожалению, я не могу направлять, так как не знаю этих библиотек в деталях. Когда я обрабатываю PDF-файлы, я обычно использую java и библиотеки java. - person mkl; 23.11.2017
comment
спасибо за ваш ответ .. Если я использую java, то какая библиотека или документ могут помочь мне с этим? - person Niks Jain; 23.11.2017
comment
С Java вы можете использовать iText или PDFBox или любую универсальную библиотеку PDF, которая обеспечивает прямой доступ к основным объектам PDF. Например, вы можете найти код для удаления всех карт ToUnicode здесь для iText. и здесь для PDFBox. - person mkl; 23.11.2017
comment
Можем ли мы распечатать pdf как изображение (png или jpeg), а затем вы можете использовать OCR OpenCV (Python)? Это поможет мне? - person Niks Jain; 24.11.2017
comment
OCR всегда является средством при столкновении с неработающими сопоставлениями Unicode или кодировками. - person mkl; 24.11.2017