Содержание хинди искажается при копировании из файла PDF - PullRequest
0 голосов
/ 24 ноября 2018

Всякий раз, когда я пытаюсь скопировать контент хинди с любого ресурса, символы искажаются.Я пытался скопировать в браузер MS Word, текстовые файлы и т. Д. Я использую Acrobat DC.

Например, в прилагаемом файле, когда я копирую содержимое страницы 3 (на хинди), символыизменены

enter image description here изменено на संिैधावनक

enter image description here изменено на ईपचारों

Я пробовал со многими библиотеками,пытался конвертировать контент с помощью встроенных инструментов экспорта, используя копирование / вставку, используя мастера, изменил кодировку / язык и т. д., но ни один из них не сработал.Я также попытался создать несколько сценариев, установить языковые пакеты, использовать OCR после преобразования в изображение, но ни один из них не сработал.

Можете ли вы подсказать, что может быть потенциальным способом решения этой проблемы?

Ссылка на файл https://www.dropbox.com/s/ujbt7d2aidqg8r4/Vision%20IAS%20Prelims%202019%20Test%201%20%5BHindi%20Medium%5D.pdf?dl=0

1 Ответ

0 голосов
/ 24 ноября 2018

по правилам переполнения стека юристов;Я знаю, что это не полный ответ, но он слишком длинный для комментария.

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

Шрифт, встроенный в файл (Arial Unicode MS), имеет прикрепленный ToUnicode CMap, который мне кажется правильным, хотя несколько из одного символакоды сопоставляются с несколькими кодовыми точками Unicode.Например, код символа 0x564 сопоставляется со значениями Unicode 0x093e, 0x0901.

Я не могу легко сказать, правильно ли это.Я мог бы кропотливо декодировать всю строку, проверить, что такое кодовые точки Unicode, а затем попытаться сопоставить их с символами в исходном файле, поместив их по отдельности в документ Word, используя Arial Unicode MS.Но мне кажется, что очень много символов правильные, и я не хочу тратить на это много времени.

[править]

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

code Имя символа Unicode

059A            0938            स       Sa
0565            0902            ं       vowel sign Anusvara
0597            093F            ि       vowel sign I
05A8            0948            ै       vowel sign Ai
0589            0927            ध       Dha
059E            093E            ा       vowel sign Aa
059F            0935            व       Va
058A            0928            न       Na
0577            0915            क       Ka

Делая все возможное, чтобы вспомнить, как читать Деванагри, я считаю, что оригинал - это что-то вродеSa (с диакритическим знаком 'am') Va (с модификатором гласного ай) Dha (с модификатором гласного aa) Na (с модификатором гласного i) и, наконец, Ka.

Боюсь, что причина этогонеправильно вырезать и вставлять просто потому, что значения ToUnicode кажутся частично неправильными.Коду символа 0x0597 было присвоено значение Unicode U + 093F, когда оно должно быть U + 0935, и коду символа 0x059f было присвоено кодовая точка Unicode U + 0935, когда оно должно быть U + 093F.То есть значения Юникода этих двух кодов символов были транспонированы.

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

Боюсь, что ваш файл PDF был плохо создан, единственныйспособ исправить это будет исправить ошибки в ToUnicode CMap.Я сделал это для двух символов, которые я отметил выше, а затем скопировал и вставил:

संवैधाषनक

Что выглядит более или менее правильно (кажется, я допустил ошибку с одной гласноймодификатор).Однако в этой таблице могут быть и другие ошибки, и попытаться исправить их очень нетривиально.Я потратил большую часть времени на решение этой проблемы, и проверка всего CMap заняла бы у меня день или два.И этот CMap является специфическим для этого документа, я не мог использовать его в другом месте, потому что шрифт является подмножеством.У другого документа будет другое подмножество, что будет означать, что коды символов будут другими.

...