Como tornar um arquivo djvu pesquisável

2

Se eu criar um novo arquivo djvu a partir de arquivos tiff , posso usar djvubind , o que torna o arquivo djvu pesquisável usando, por exemplo, tesseract-ocr .

No entanto, suponho que eu tenha dado o arquivo djvu . Como posso torná-lo pesquisável?

Para pdf eu sei pdfsandwich existe algo semelhante para djvu?

    
por student 02.10.2014 / 20:49

1 resposta

4

A maneira "simples" seria converter o arquivo .djvu de volta para vários arquivos .tiff (não para um TIFF de várias páginas) e, em seguida, recombiná-los com djvubind . No entanto, isso diminuirá a qualidade da imagem dos arquivos .djvu , já que esta é uma conversão com perdas (quase certamente quando você usa.

Então, é melhor inserir o texto com ed. OCR no original .djvu e é isso que este script faz. Esse script depende de alguns binários que você pode encontrar no pacote djvulibre-bin , caso ainda não tenha sido instalado.

Aqui está o script:

#!/usr/bin/perl

$lang = "eng";

if ( $#ARGV < 0 ) {
  print "give a DJVU file as 1st argument \n" ;
  exit 0 ;
}

$inputdjvu = $ARGV[0] ;
$imagetmp = "/tmp/temp.tif" ;
$djvutmp = "/tmp/outdjvu" ;

print "processing of $inputdjvu\n" ;

# calculate the number of pages
$nbpages = 'djvused "$inputdjvu" -e 'n'' ;
print "number of pages: $nbpages" ;

for ($i=1 ; $i <= $nbpages ; $i++) {
  print "OCR de la page $i\n" ;

  # page extraction as an image
  'ddjvu -format=tiff -mode=black -page="$i" "$inputdjvu" $imagetmp' ;

  'tesseract $imagetmp /tmp/outocr -l $lang' ;
  print "OCR done\n" ;

  open(TXT, '/tmp/outocr.txt') ;
  open(TXTDJVU, ">$djvutmp") ;

  print TXTDJVU "(page 0 0 1 1\n" ;
  while ($line=<TXT>) {
    $line =~ s/\"/\\"/g ;
    print TXTDJVU "(line 0 0 1 1 \"$line\")\n" ;
  }
  print TXTDJVU ")\n" ;

  close (TXT) ;
  close (TXTDJVU) ;

  # writing the text in the DJVU file
  'djvused "$inputdjvu" -e 'select $i; remove-txt' -s' ;
  'djvused "$inputdjvu" -e 'select $i; set-txt $djvutmp' -s' ;
}

# note: structure which works
# print TXTDJVU "(page 0 0 1 1\n" ;
#   print TXTDJVU "     (line 0 0 1 1 \"toto\")\n" ;
#   print TXTDJVU "     (line 0 0 1 1 \"toto la la\")\n";
#   print TXTDJVU ")\n" ;
    
por 02.10.2014 / 21:01

Tags