Автор Тема: pdf с криво копируемым текстом. [решено]  (Прочитано 2791 раз)

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 116
А какие есть варианты с извлечением текста из странного pdf ? okular, acroread, xpdf его вполне себе показывают по-русски. но вот попытка скопировать текст приводит к тому, что в буфер попадает что-то вроде
Цитировать
Ñåãîäíÿ î÷åâèäíà
Есть идеи ?

Очевидно, нужен какой-то преобразователь в текст, который не учитывает кодировку (её потом можно и подобрать). Сейчас же кодировка просто портится...
« Последнее редактирование: 28.04.2014 19:30:59 от asy »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 956
    • Домашняя страница
    • Email
Re: pdf с криво копируемым текстом.
« Ответ #1 : 28.04.2014 19:04:51 »
А какие есть варианты с извлечением текста из странного pdf ? okular, acroread, xpdf его вполне себе показывают по-русски. но вот попытка скопировать текст приводит к тому, что в буфер попадает что-то вроде
Цитировать
Ñåãîäíÿ î÷åâèäíà
Есть идеи ?

Очевидно, нужен какой-то преобразователь в текст, который не учитывает кодировку (её потом можно и подобрать). Сейчас же кодировка просто портится...
Иногда это решают распознаванием текста из PDF. В том же YAGF, к примеру.
Андрей Черепанов (cas@)

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 242
Re: pdf с криво копируемым текстом.
« Ответ #2 : 28.04.2014 19:05:23 »
Это уже обсуждалось и решения кроме ocr нет, т.к. в таких pdf используется нестандартный алфавит.

Оффлайн Rider

  • /usr/sbin/control
  • *******
  • Сообщений: 1 136
Re: pdf с криво копируемым текстом.
« Ответ #3 : 28.04.2014 19:08:42 »
если pdftotext не работает, то ничего сделать не получится.

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 5 976
Re: pdf с криво копируемым текстом.
« Ответ #4 : 28.04.2014 19:19:16 »
Если это
www.artlebedev.ru/tools/decoder
не помогает - распознавать.

Вот мои скриптики - использую для книжек :)

#!/bin/bash

#################################################################
#
# ПАКЕТНАЯ РАСПОЗНАВАЛКА КНИЖЕК DJVU и PDF(картинки)
#
# Использование:
#
# book2txt.sh bookfile.djvu
# book2txt.sh bookfile.pdf
#
# Результат будет в файле txt.txt
#
# Tребуются пакеты:
#
# cuneiform
# djvused
# ddjvu
# gs (Ghostscript)
#
#################################################################

if [ "$1" == "" ]; then
echo "Use:"
echo "book2txt.sh bookfile.djvu   or   book2txt.sh bookfile.pdf"
echo ""
echo "(for work need cuneiform djvused ddjvu gs)"
exit
fi

if [ -f $1 ]; then
echo "File $1 exist... ok"
else
echo "File $1 not found - exit"
echo ""
echo "END"
exit
fi

echo "#############################################################################"
echo "try $1 to tif"
echo "#############################################################################"

# recognize file type

HE1=`head -c 20 $1 | grep -c "DJVM"`
HE2=`head -c 20 $1 | grep -c "PDF"`

if [ "$HE1" == "1" ]; then
echo "find DJVU file!"

dcount=`djvused $1 -e "n"`
echo "page number $dcount"

for j in `seq 1 $dcount`
do
dddcount="$j"
if [ $j -lt 100 ]; then
dddcount="0$dddcount"
fi
if [ $j -lt 10 ]; then
dddcount="0$dddcount"
fi
echo "$dddcount"
ddjvu -format=tiff -quality=100 -scale=300 -page=$j $1 img_$dddcount.tif
done

else
if [ "$HE2" == "1" ]; then
echo "find PDF file!"
#convert -density 300 $1 img_%04d.jpg
gs -SDEVICE=tiffg4 -r350x350 -sPAPERSIZE=letter -sOutputFile=img_%04d.tif -dNOPAUSE -dBATCH -- $1
else
echo "can't find file type!  It is not PDF or DJVU file"
echo "END"
exit
fi
fi

echo "#############################################################################"
echo "ok"
echo "#############################################################################"


echo "---BEGIN---">txt.txt

z=0
FullERR=0
str=`ls -1 img_*`
count=`ls -1 img_* | wc -l`

for i in $str
do

z=`expr $z + 1`
echo "---------------------------------------------->try page $z from $count"
echo ""> tmp.txt

ERR=`cuneiform -l ruseng -o tmp.txt $i`
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "error! - try one more!!!"
ERR=`cuneiform -l ruseng -o tmp.txt $i`
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "error! - try one more-2!!!"
ERR=`cuneiform -l ruseng -o tmp.txt $i`
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "error! - try one more-3!!!"
ERR=`cuneiform -l ruseng -o tmp.txt $i`
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "Can't recognize page $z ERROR! ERROR! ERROR! ERROR!"
FullERR=`expr $FullERR + 1`
fi
fi
fi
fi

cat tmp.txt >>txt.txt
echo "--- ^ PAGE $z ^ ---">>txt.txt

done

echo "---END---">>txt.txt
echo "Recognize $z from $count with $FullERR errors!"
echo "see txt.txt file"
echo "END"

#!/bin/bash

echo "---BEGIN---">txt_t.txt

z=0
FullERR=0
str=`ls -1 img_*`
count=`ls -1 img_* | wc -l`

for i in $str
do

z=`expr $z + 1`
echo "---------------------------------------------->try page $z from $count"
echo ""> tmp_t.txt

ERR=` tesseract $i tmp_t -l rus  `
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "error! - try one more!!!"
ERR=` tesseract $i tmp_t -l rus  `
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "error! - try one more-2!!!"
ERR=` tesseract $i tmp_t -l rus  `
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "error! - try one more-3!!!"
ERR=` tesseract $i tmp_t -l rus  `
ERR2=`echo $?`
echo "[- $ERR -]|[- Exit status $ERR2 -]"
if [ "$ERR2" != "0" ]; then
echo "Can't recognize page $z ERROR! ERROR! ERROR! ERROR!"
FullERR=`expr $FullERR + 1`
fi
fi
fi
fi

cat tmp_t.txt >>txt_t.txt
echo "--- ^ PAGE $z ^ ---">>txt_t.txt

done

echo "---END---">>txt_t.txt
echo "Recognize $z from $count with $FullERR errors!"
echo "see txt_t.txt file"
echo "END"

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 116
Re: pdf с криво копируемым текстом.
« Ответ #5 : 28.04.2014 19:19:44 »
если pdftotext не работает, то ничего сделать не получится.
Работает. :-) Как раз залез написать, что помогло
pdftotext -enc Latin1 qqq.pdfплюс, собственно, выяснение самой кодировки получившегося qqq.txt

А тут вагон ответов. Всем спасибо. :-)
« Последнее редактирование: 28.04.2014 19:24:40 от asy »