Djvu
如何使 djvu 文件可搜尋
如果我從我可以使用
djvu
的文件中創建一個新文件,這使得該文件可以使案例如.tiff``djvubind``djvu``tesseract-ocr
但是假設我已經給出了
djvu
文件。我怎樣才能使它可搜尋?對於 pdf,我知道
pdfsandwich
djvu 有類似的東西嗎?
“簡單”的方法是將 .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" ;