Выдёргивание текста из pdf: pdftotext + iconv [SOLVED]

Привет!

Возникла следующая проблема - имеются статьи в формате pdf.
Необходимо выдрать из статей текст. Текст там в основном на русском.
Проблема в том, что при простом копировании текста в буффер
или использовании pdftotext на выходе получаю кракозябры.

Что-то вроде этого:
Yiioee a iaoae ?ecie e a eeiaaenoeea

Хотелось бы очень решить эту проблему iconv-ом, но не знаю что куда и как гонять.

Спасибо

Мой личный опыт говорит о

Мой личный опыт говорит о следующем:

1. pdftotext - старая утилита. + ситуация с кодировками многострадального русского языка.
Есть большие и обоснованные сомнения в работоспособности.

2. Есть заметная зависимость от происхождения (способа формирования) конкретного .pdf-файла.
"Слава" Адобе :(

3. Проблему наблюдал лично. Но...
По последним данным (Evince 2.22.2, Использует poppler версии 0.8.7 (cairo), "традиционная" системная локаль KOI8-R) проблема (кириллица, перенос через буфер памяти) моей практикой не подтверждается.
Если файл есть в Сети - бросьте ссылку, или я дам e-mail - на почту. Проверю (получится - пришлю текстовый файл).

:wq
--
Live free or die

Дело в том, что другие статьи

Дело в том, что другие статьи также содержащие русские тексты были сконвертированны pdftotext нормально.
Попробовал на виндовой машине Acrobat-ом выдернуть текст из этих pdf-файлов, но получил тоже самое.

У меня стоит Evince 2.24 проблема таже - текст при копировании превращается в кракозябры.

Интересно вот, что как посредством преобразования кодировок с помощью iconv получить нормальный текст.

Файл в сети есть, но линк я не помню. Но можешь взять отсюда:
http://www.turboupload.com/files/get/y6ePsPh8lo/emocii.pdf

Вот нормальный

Вот нормальный линк
http://il.rsuh.ru/lib/emotions/01.pdf

Усё понятно :)))

Усё понятно :)))

Отдельные шибко вумные (и искренне верующие в то, что все разработчики строго следуют стандартам) называли сие глупостью, однако оно - суровая правда жизни...
CP1252 → CP1251

Посредством любимого текстового редактора записываешь содержимое буфера памяти в простой текстовый файл, далее

$ iconv -f cp1252 -t koi8-r file.temp > file
$ rm -f file.temp

Не получится - http://www.artlebedev.ru/tools/decoder/

ЗЫ: Постить на форуме декодированный текст не стал :)

:wq
--
Live free or die

Кстати, показательно (и в

Кстати, показательно (и в моём случае интересно) вот что (системная локаль - KOI8-R):

$ pdftotext 01.pdf
 $ iconv -f utf8 -t koi8-r 01.txt 
Эмоции в языке и речи: Сборник научных статей / Под ред. И. А. Шаронова. М.: РГГУ, 2005.

iconv: недопустимая входная последовательность в позиции 148

(т.е. pdftotext фактически отрабатывает правильно).

:wq
--
Live free or die

iconv -c -f utf8 -t koi8-r

iconv -c -f utf8 -t koi8-r 01.txt

Должно проглотить.

Thanks, но :)

Но, в данном конкретном случае, не прокатывает:

,    ,   ÷,      ,     ÷     ÷÷ ,   ,  , ÷, ÷  ÷ .    .    ÷  ÷     ÷,   .   ÷  ,   ÷             ÷÷   .     ÷   ,   .              ÷÷ ,  ÷           ,   .     , ÷     ÷          .         .         ,      ÷   ,     , ,   .        . , ,    19  .  : ÷    , ÷      .        ÷,            ÷ .

5


     ÷,         .            ÷  ÷     .  ,  ÷ ,       .        ,   ,   , ÷    .      ÷  , ,           . ÷                ÷        ,     . , ,   , ÷ ÷   ,             .               .            ,     ÷    ÷    , -÷, -  ÷, ÷  ÷.   ,   ,      ÷ ,     .

. . 

6

Меня же интересовало скорее: почему при системной локали KOI8-R pdftotext перекодирует в UTF8?

Ещё в контексте темы лично меня интересуют перекодировщики с функцией автоматического определения кодировки входнйо последовательности символов (ибо мой любимый Russian Anywhere зело устарел).

Автору же темы для решения конкретной задачи извлечения конкретных двух страниц текста из .pdf перенести через буфер памяти текст в перекодировщик, ссылку на который я приводил, и получить результат.
После чего можно спокойно порассуждать на предмет причин происхождения и общего способа решения данной проблемы.

:wq
--
Live free or die

>>Меня же интересовало

>>Меня же интересовало скорее: почему при системной локали KOI8-R pdftotext перекодирует в UTF8?

Ну это, как раз, просто. Он не перекодирует текст по умолчанию.
man pdftotext

...
-enc encoding-name
Sets the encoding to use for text output. The encoding-name must be defined with the unicodeMap
command (see xpdfrc(5)). The encoding name is case-sensitive. This defaults to "Latin1" (which is
a built-in encoding). [config file: textEncoding]
...

>>После чего можно спокойно порассуждать на предмет причин происхождения и общего способа решения данной проблемы.
В данном контексте обсуждать не чего.

$pdffonts 01.pdf
Error: PDF file is damaged - attempting to reconstruct xref table...
Error: Couldn't find trailer dictionary
Error: Couldn't read xref table

$
pdffonts ../doc/WCP5632_38_45_55_Брошюра_RUS.pdf
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
TSDEPU+HelveticaCyr-Upright CID Type 0C yes yes yes 550 0
SKTYBW+HelveticaCyr-Bold CID Type 0C yes yes yes 555 0
SKTYBW+HelveticaCyr-Upright CID Type 0C yes yes yes 487 0
SKTYBW+HelveticaCyr-Inclined CID Type 0C yes yes yes 488 0
SKTYBW+Helvetica-Condensed Type 1C yes yes no 502 0
SKTYBW+Helvetica-Condensed-Bold Type 1C yes yes no 501 0
Error: Illegal entry in bfchar block in ToUnicode CMap
RCJSNY+Helvetica-Condensed-Black Type 1C yes yes yes 506 0
VTHQRQ+HelveticaCyr-Upright CID Type 0C yes yes yes 94 0
RCJSNY+HelveticaCyr-Upright CID Type 0C yes yes yes 520 0

система считает этот файл кривым. Если это не так, то надо багрепорт писать.

Всё интереснее и интереснее...

wi написал(а):
В данном контексте обсуждать не чего.

$pdffonts 01.pdf
Error: PDF file is damaged - attempting to reconstruct xref table...
Error: Couldn't find trailer dictionary
Error: Couldn't read xref table
..
система считает этот файл кривым. Если это не так, то надо багрепорт писать.

Уточнение: Ваша система :)
У меня результат несколько отличается:

$ pdffonts 01.pdf 
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
OEKIOA+Arial                         TrueType          yes yes no      16  0
OEKJDP+Arial,Bold                    TrueType          yes yes no      17  0
Arial                                TrueType          yes no  no      59  0
SIWHOY+Arial                         CID TrueType      yes yes yes    136  0
OEKLNA+Arial,Italic                  TrueType          yes yes no       6  0

Вы какой файл качали/смотрите? Я - тот, что по второй ссылке.

:wq
--
Live free or die

Всем огромное спасибо.

Всем огромное спасибо. Проблема удачна решена.

Вот, может, кому ещё пригодится:

cat ../kognit-lingvistik.txt | iconv -f utf8 -t iso-8859-1 | iconv -f cp1251 -t utf8 > ../kognit-lingvistik2.txt

Спасибо, пригодилось. Таже

Спасибо, пригодилось. Таже ситуация. Тоже работает :)

Еще вариант

Спасибо anatolb, работает.
Как альтернатива (просто короче):

pdftotext -enc Latin1 file.pdf - | iconv -f cp1251 -t utf8 > file.txt

При ошибках iconv - пробовать опцию "-c".
Или, если стоит enca:

pdftotext -enc Latin1 file.pdf - | enca -c > file.txt

Проверено на файле с русскими, украинскими и английскими символами. Часть украинских (ї,є) и кавычки заменились на квадратики.

Цитата: Проверено на файле с

Цитата:
Часть украинских (ї,є) и кавычки заменились на квадратики.

А как с этим бороться?

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".