LINUX.ORG.RU

Проблема с кодировкой при copy/paste словацкого текста

 


0

1

Имеется pdf-файл. В браузере (ффокс, хромиум) файл нормально отображается. Но если выделить текст, то получается вот такое. И если скопировать текст и вставить его в текстовый файл редактора, то получается вот такое. В чём причина и как это исправить ?

При копировании словацк. текста из других pdf-файлов проблем нет.

Ответ на: комментарий от noname111

да выкинь что ты там используешь и возьми нормальный pdf viewer. Оттуда копируется почти все за исключением некоторых символов ибо скан плохой. А слева внизу если искать через контесктное меню браузера.

Зачем мучиться?

https://ibb.co/4MSkKGB

кстати у нас был несколько месяцев сотрудник из словакии, он мне страсти понарасказал о словакии. Ес доит бедные страны хуже некуда

monkdt
()
Ответ на: комментарий от monkdt

Блин.. классика лора.. В том-то и дело что диакритика не копируется. И дело не в просмотрщике. В просмотрщиках все нормально. Проблемы при копировании из браузера, или просмотрщика. Мне нужно полноценное копирование.

кстати у нас был несколько месяцев сотрудник из словакии, он мне страсти понарасказал о словакии. Ес доит бедные страны хуже некуда

С этим в толксы. Не мусорь тут.

noname111
() автор топика

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

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

Лёгкого решения нет.

Я бы скопировал весь текст, а потом стал вычитывать его и составлять список «ошибок». Например, текст с титульной страницы (лучше работать в текстовом редакторе, который умеет показывать коды символов и не делает никаких нормализаций юникодного текста или каких бы то ни было автозамен):

Jana Pekarovièová, U+00BCudmila U+008Eigová,
Michaela Palcútová, Jozef U+008Atefánik

(В примере часть символов непечатаемая, поэтому я заменил их для видимости кодами.)

Сравнивая этот фрагмент с пдфкой, видно, что:

U+00BC → L’
U+008E → Ž
U+008A → Š

Если окажется так, что соответствие однозначное, то считай повезло: после составления полного списка ошибок (который не должен быть очень большим — десяток-другой символов) ты можешь нарисовать скрипт поиска ошибок и замены на правильные символы или сделать в редакторе десяток-другой поисков-и-замен. Если же соответствие не однозначное, то увы — только вычитка и ручная правка.

debugger ★★★★★
()
Последнее исправление: debugger (всего исправлений: 2)
Ответ на: комментарий от debugger

Благодарю !

Но я не программист и скрипт написать не смогу.

И если выводить текст соответствующими шрифтами, то результат будет выглядеть нормально

Означает ли это, что если в систему устанавливать методом тыка шрифты, поддерживающие словацкие символы, то можно и получить норм. результат ?

работать в текстовом редакторе, который умеет показывать коды символов

Например geany умеет так делать ? Где это включить в нем ?

noname111
() автор топика
Ответ на: комментарий от noname111

По выводу на картинке вообще какая-то абракадабра.

Может это обфусцированный файл?

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

У вас нет такого подозрения?

Может @intelfx поможет? Он вроде имел дело с такими файлами.

forest22
()
Последнее исправление: forest22 (всего исправлений: 1)
Ответ на: комментарий от forest22

Да не, тут никакого обфусцирования - файл выложен в свободный доступ университетом.

Я вначале думал, что надо какие-то кодировки и шрифты дополнительно установить.

noname111
() автор топика
Ответ на: комментарий от forest22

Да выше уже ответили.

Кажется, текстовый слой был записан в Latin-1 (по крайней мере с титульной страницы складывается именно такое впечатление), но в метаданных, видимо, указана кодировка какая-то другая (или подразумевается, я не знаю, как технически устроен текст в PDF).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от noname111

Но я не программист и скрипт написать не смогу.

Не обязательно быть программистом. Я выше сказал, что если ты составишь таблицу замен, то можно делать поиск и замену в текстовом редакторе.

Означает ли это, что если в систему устанавливать методом тыка шрифты, поддерживающие словацкие символы, то можно и получить норм. результат ?

Нет. Я выше приводил пример, что для нормального результата надо, чтобы код U+00BC отображался как L’. Таких шрифтов ты не найдёшь. Тут какая-то хитрожопая кодировка для некоторых символов, подход чем-то напоминает ChiWriter (если кто ещё помнит что это за зверь).

Например geany умеет так делать ?

Гм, ответ сложный, одновременно и нет, и да. Ванильный Geany из стандартной репы не умеет, а вот Geany, пропатченый мной, умеет. Пропатченый Geany для Федоры, Магеи и клонов Красной Шапки можно взять здесь. Если у тебя не один из перечисленных дистров, то тебе придётся выковырять патчи из исходного рпма и компелять Geany самому. Или искать другой редактор.

Кроме того, скопированный из пдфки текст потеряет всё форматирование. Слетят таблицы, многоколоночный набор, иллюстрации, выделения жирным и наклонным, заголовки превратятся в обычный текст… Даже если ты восстановишь собственно текст, то тебе придётся верстать книжку фактически заново. Работы минимум на неделю. Заниматься этим можно, если только эта книжка тебе очень нужна.

Мне кажется, что количество проблем уже превысило твой уровень. Поэтому бросай это дело.

debugger ★★★★★
()
Ответ на: комментарий от forest22

Так в принципе можно экспортировать как текст, а потом с iconv преобразовать в UTF-8?

Не пудри человеку голову. Я уже сказал, что простых методов нет. Там дело в том, что символы в одной строке могут иметь разные кодировки, а всякие iconv и иже с ними предполагают, что весь файл в одной и той же кодировке.

debugger ★★★★★
()
Ответ на: комментарий от intelfx

Кажется, текстовый слой был записан в Latin-1…

Когда в пдфке используются нестандартные (неюникодные) кодировки, пдфка должна содержать таблицы для перекодирования, чтобы юзер мог выделить и скопировать текст. В данную пдфку кто-то «забыл» положить эти таблицы:

$ pdfbox ExtractText ./Foneticka_prirucka.pdf
Jun 26, 2023 1:01:19 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
WARNING: No Unicode mapping for G4A (1) in font HFPNDG+MSTT31c6d3
Jun 26, 2023 1:01:19 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
WARNING: No Unicode mapping for G61 (2) in font HFPNDG+MSTT31c6d3
Jun 26, 2023 1:01:19 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
WARNING: No Unicode mapping for G6E (3) in font HFPNDG+MSTT31c6d3
Jun 26, 2023 1:01:19 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
WARNING: No Unicode mapping for G20 (4) in font HFPNDG+MSTT31c6d3
...

Случайно или намеренно — хз. В результате при копировании текста из этой пдфки основная масса текста копируется нормально, но некоторые символы остаются неперекодированными в юникод. Судя по выводу тулзы, этих нестандартных шрифтов там 29, а оставшихся неперекодированными букв — 662. В принципе, не так уж и много, ТС мог бы заняться, если это ему действительно нужно.

debugger ★★★★★
()

В чём причина и как это исправить ?

Причина в том, что в эту пдфку «забыли» кое-что положить. Может быть, случайно, может быть, намеренно. Легко и просто, запуском какой-либо волшебной команды это не исправить.

С помощью утилит типа pdftotext ты можешь получить текст, но часть символов будет «битой», автоматом это исправить невозможно.

Как вариант: Можешь попробовать прогнать свою пдфку через распознавалку текста (OCR; optical character recognition), но тут тоже может быть много препятствий.

debugger ★★★★★
()

У меня получилось с помощью вот этой тулзы: https://pypi.org/project/multilingual-pdf2text/ сконвертировать ваш пдф.

Вот результат: https://drive.google.com/file/d/1ilv3PbBO2dwLzOGhRGMAjbBEfI-6FE6U/view?usp=sharing

Я делал это на последней Ubuntu 22.04 LTS.

  • установил tesseract-ocr, tesseract-ocr-slk
  • установил, как указано в описании, необходимый пакет: pip install multilingual-pdf2text
  • в базовом питон-скрипте (приведен на сайте) поправил путь к файлу Foneticka_prirucka.pdf
  • сохранил скрипт, как fonetica.py
  • запустил скрипт: python3 fonetica.py > fonetica.txt
  • sed-ом попрвил newlines: sed 's/\\n/\n/g' fonetica.txt > fonetica_sed.txt

На новом компьютере средней мощности время исполнения программы прибл. 5 мин.

Как вам результат?

forest22
()
Ответ на: комментарий от debugger

Благодарю за помощь и объяснения !

С помощью утилит типа pdftotext ты можешь получить текст, но часть символов будет «битой», автоматом это исправить невозможно.

Да, так и есть. Дополню, что pdftotext не сохраняет столбцы и колонки. А вот в тексте, экспортированном из окуляра, они сохранены. Кроме того, помимо всяких SCI, PM, которые сразу бросаются в глаза при просмотре экспортир. текста, есть и менее заметные ошибки. Например, в слове <deň> стоит <ò> вместо <ň> в <slovenèina> <è> вместо <č>

Зато текст не обрезан (см. мой пост ниже)

noname111
() автор топика
Ответ на: комментарий от forest22

Как вам результат?

Прежде всего, независимо от результата, благодарю вас за помощь !

Теперь по результату - посмотрим как отработал tesseract. Как и говорил уже выше debugger, скопированный из пдфки текст потерял всё форматирование. Слетели таблицы, многоколоночный набор, выделения жирным и наклонным, заголовки превратились в обычный текст. Но с этим можно смириться. А вот с нижеследующим уже сложнее, но тоже можно.

Например, в тексте

ovorme spolu po slovensky!

so správnou výslovnosťou.

ýslovnosť je pre úspešnosť

omunikácie dôležitá,

lby nám ľudia rozumeli.

обрезаются первые буквы начальных слов первых 4-х строчек, а пятой вместо а стоит l

В оригинале так:

Hovorme spolu po slovensky!

A so správnou výslovnosťou.

Výslovnosť je pre úspešnosť

komunikácie dôležitá,

aby nám ľudia rozumeli.

Иногда сливаются слова Letus speak  или NaUniverzite Komenského. - Na Trnavskej univerzite.

Обрезание (ошибка распознавания ?) первых букв происходит только в тексте, находящемся в синих блоках. Строчки, не заключенные в синие блоки, не обрезаются.Однако текст в синих блоках тоже не всегда обрезается. Например, на стр.26 в разделе 2.1.3 в синих блоках строчки обрезаны, а в 2.1.4 не обрезаны.

Не распознались некоторые символы, указывающие ударение и интонацию Например, на стр.23 в последнем абзаце, можно сравнить с оригиналом строчкуN > N[múoi Iživod je Ijednotvárni || naháňam lsľiepki | a ľuďia naháňajú Imňa ||

Не распознались подстрочники, например, на стр.28 в последнем абзаце в слове m siar между m и s

В целом, всё это, конечно, много лучше того, с чего я начинал эту тему, ведь диакритика нигде вроде не нарушена, потому ещё раз большое спасибо !

P.S. Ну или как вариант можно экспортировать текст, как предлагал debugger, и произвести поиск и замену в текст. редакторе нарушенных букв, предварительно составив таблицу замен. Оба варианта хороши по-своему - у меня есть выбор.

P.P.S. Я отправлял письмо на универ хозяевам файла, но пока ни ответа, ни привета. Вероятно его и не будет.

noname111
() автор топика