Не могу скопировать текст (рус) из PDF

RASA-2009

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




 

 
во всяких вордах-блокнотах — еще хуже, Штирлиц4 не декодирует.
вот пример файла:
Как-нибудь можно с этим бороться?

yolki

в файле используется своя, особая кодировка шрифта. типа когда буква 'd' кодируется не кодом 100, а кодом 4.
имхо, тут два выхода:
1. написать собственный декодировщик. не факт, что сработает, потому что например у жирного шрифта таблица может быть другая
2. распознавать.
pdf->tif делается за секунды
tif->txt сносно делает cunei за минуты
ну или ABBYY PDF Transformer

RASA-2009

А tif — это картинка? если да — то это наверно то же, что и "распознавать"?

Serab

http://www.artlebedev.ru/tools/decoder/
работает в автоматическом режиме.
Бля, почему он лучше работает, чем enca?

RASA-2009

ABBYY PDF Transformer лучше всего — но пока не удается нетриальный вариант раздобыть. То же относится к Файнридеру-профессионал, который ПДФ сразу обрабатывает.
Пока действую PDF -> JPG, далее Файнридер-спринт. Но ошибки встречаются

Serab

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

yolki

я разгадал эту кодировку кстати.
recode utf8..cp1252 | recode cp1251..utf8
ОГЛАВЛЕНИЕ
Перечень математических символов и сокращений ........................ 3
Предисловие ......................................................................................... 5
Введение ............................................................................................... 7
Г л а в а 1. Основные понятия и теоремы теории вероятностей ..... 15
1.1. Элементы комбинаторики ........................................................
1.2. Задачи на непосредственное применение формул комби-
наторики .....................................................................................
1.3. Треугольник Паскаля. Бином Ньютона ...................................
1.4. Виды случайных событий. Операции над событиями ............
1.5. Определения вероятности .........................................................
1.6. Некоторые теоремы теории вероятностей ..............................
1.7. Применение комбинаторики для подсчета вероятностей .....
1.8. Формула полной вероятности ..................................................
1.9. Формула Байеса. Вероятность оценки гипотез .......................
1.10. Независимые повторные испытания. Формула Бернулли .....
1.11. Наивероятнейшее число наступления события в схеме
Бернулли ....................................................................................
1.12. Формула Пуассона ....................................................................
1.13. Локальная и интегральная теоремы Муавра

kokto

я разгадал эту кодировку кстати.
recode utf8..cp1252 | recode cp1251..utf8
Так что, получается перепутали кодировки 1251 и 1252?

kokto

У меня такая же проблема была, когда я пытался вставить в pdf исправления на русском :)
И тогда вопрос, как в реестре прописать, чтобы винда вместо 1252 по дефолту все-таки использовала 1251?

RASA-2009

Ну, во-первых, artlebedev фигню выдает в автом. режиме (для этого текста)
Во-вторых, я в этой фразе
recode utf8..cp1252 | recode cp1251..utf8

не понял, что означают пары utf8..cp1252 и cp1251..utf8 (на том же сайте в качестве задания кодировок вручную предлагается одна кодировка для инпута и аутпута, а не пара)
В-третьих, и главных: то, что Вы распознали кодировки, может ли упростить вышеизложенные процедуры с распознавателями?

kokto

не понял, что означают пары utf8..cp1252 и cp1251..utf8
Это означает, что текст был открыт в кодировке utf8, сохранен в cp1252. Потом открыли этот же файл, но в кодировке cp1251 :)

yolki

можно сохранить весь текст из PDF и прогнать его через этот фильтр.
например так:
cat original.txt | recode utf8..cp1252 | recode cp1251..utf8 > good.txt
под виндой последний шаг (cp1251..utf8 возможно, лишний.
cat и recode есть под винду, например в составе http://unxutils.sourceforge.net
как получить файл original.txt под виндой я не знаю. под линуксом у меня это получается двумя способами: в evince "выделить всё/копировать/вставить в vi" и pdftotext
возможно, есть аналоги под винду.
acroread под линуксом не копирует этот текст правильно

yolki

для истинных самураев есть такой способ: распаковать PDF, вытащить шрифт, исправить настройку кодировки, запаковать обратно, собрать PDF.
вот такая трансанальная микрохирургия
PDF - открытый формат, последний PDF reference весит около 30Мб и занимает около 1.5 тыс страниц :cool:
клац

Filan

cat original.txt | recode utf8..cp1252 | recode cp1251..utf8 > good.txt
А почему не iconv?

RASA-2009

Экспортировал в Акробате из ПДФа в TXT (то же при простом копировании запустил
cat original.txt | recode utf8..cp1252 | recode cp1251..utf8 > good.txt
с дословно таким же синаксисом. пишет "прекращена работа recode" на выходе — нулевой файл. Поубирал некоторые | — вроде, выходные файлы какие-то образуются — но исходные и весят столько же.
Есть 2 вопроса
1) А что при этом делает программа cat, если перекодирует (теоретически) recode?
2) как выяснить точный синтаксис видового recode? (например, в интернете есть вариант utf-8 с дефисом и т.д.)

Serab

1) А что при этом делает программа cat, если перекодирует (теоретически) recode?
просто выводит файл, по умолчанию на экран, но если используется палочка, то на вход следующей команде (конвейер типа). Под виндой можно попробовать type вместо cat или просто написать название файла как параметр первому recode.
2) как выяснить точный синтаксис видового recode? (например, в интернете есть вариант utf-8 с дефисом и т.д.)
А recode -h ничего полезного не выводит? Вон, в никсовой версии recode -l выводит список поддерживаемых кодировок. Вообще, можешь просто выложить тут нужный файл, «мы» перекодируем.

yolki

привычка свыше нам дана
замена счастию она
© Наше Всё™

yolki

в винде ровно такой же синтаксис, что я написал.
программа cat выдаёт содержимое файлов на экран или в стандартный поток вывода.
например:
cat file1 file2 file3
распечатает на экран три файла.
cat file1 file2 file3 > file.out
сделает конкатенацию файлов - в файле file.out буду все три.
палка - это трубопровод. перенаправляет вывод одной программы на вход другой.
можно запустить recode следующим способом:
recode utf8..cp1252 file.txt
тогда она удалит файл file.txt и вместо него сделает перекодированный.
если вызывать recode без параметров, то она берёт то, что ей вводят на стандартный вход (≡ ввод с клавиатуры, если нет трубопровода переводит (FROM..TO) и выводит на стандартный вывод (≡ на экран, если нет трубопровода или >).
если recode встречает символы, которые она не может подставить в кодировку FROM, то она обламывается. можно её попросить не обламываться с помощью ключа --force

kokto

Ну ты прямо минихелп по командной строке выдал :ooo:

RASA-2009

спасибо за коммент
на практике я применял
cat input.txt | recode --force utf8..cp1252 | recode --force cp1251..utf8 > good.txt
Все то же, прекращена работа, в ком. окошке пишется "инвалид аргумент"
То же для синонима -f
Сейчас еще попробую взять какой-нибудь хороший файл с известной кодировкой. Может, эта виндовая recode вообще не работает?

Serab

ну так что выдает recode -l?

RASA-2009

CP1251/CR-LF 1251/CR-LF ms-cyrl windows1251
CP1252/CR-LF 1252/CR-LF ms-ansi windows1252
UTF8 u8 и рядом, видимо, синонимы
Во всех вариантах пишется одно и то же
tmpfile : Invalid argument

RASA-2009

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

Serab

А! tmpfile. Что-то я раньше не замечал это слово. ну тут хз, почему он там ему инвалид аргументы передает. Если бы там еще был strace :grin:

Serab

попробуй iconv :grin:
Там вместо recode FROM..TO надо писать iconv -f FROM -t TO :)

alekc34

у тебя же штирлиц есть

RASA-2009

штирлиц перекодирует только в windows1251, а не 1252, как написал

aleks

посоветуйте как перекодировать пдф файл 1252 на 1251 от сюда http://dbn.co.ua/load/normativy/dbn/b_2_2_12/1-1-0-1802
Оставить комментарий
Имя или ник:
Комментарий: