djvu 파일을 검색 가능하게 만드는 방법

djvu 파일을 검색 가능하게 만드는 방법

djvu파일 에서 tiff새 파일을 생성 하면 djvubind이를 사용하여 예를 들어 다음을 djvu사용하여 파일을 사용할 수 있게 만들 수 있습니다.tesseract-ocr

djvu하지만 내가 파일을 주었다고 가정해 보겠습니다 . 검색 가능하게 하려면 어떻게 해야 합니까?

pdfsandwichPDF의 경우 djvu에 비슷한 것이 있다는 것을 알고 있습니까 ?

답변1

"쉬운" 방법은 .djvu 파일을 여러 .tiff파일(다중 페이지 TIFF 대신)로 다시 변환한 다음 이를 .djvu 파일과 다시 결합하는 것 입니다 djvubind. 그러나 .djvu이렇게 하면 손실이 많은 변환이므로 파일의 이미지 품질이 다소 저하됩니다 ( .

따라서 원본 텍스트에 OCR 텍스트를 삽입하는 것이 좋습니다 .djvu. 이 스크립트하다. 스크립트는 djvulibre-bin아직 설치하지 않은 경우 패키지에서 찾을 수 있는 일부 바이너리에 따라 다릅니다.

스크립트는 다음과 같습니다.

#!/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" ;

관련 정보