Με αφορμή ένα αρχείο pdf στο θέμα "Πραγματικές Κεραίες", ασχολήθηκα με την επεξεργασία και τον εμπλουτισμό ενός scan-αρισμένου αρχείου pdf ώστε να αποκτήσει δυνατότητα αναζήτησης και επιλογής κειμένου στα Ελληνικά και τα Αγγλικά. Στην αναζήτηση για λύσεις Open Source βρήκα το pdfocr (script σε γλώσσα RUBY) το οποίο με λίγες προσαρμογές έδωσε ένα καλό αποτέλεσμα. Το αρχείο της δοκιμής ήταν αρκετά μεγάλο, 188 σαρωμένες σελίδες, αλλά ο χρόνος μετατροπής των 30 λεπτών μου φάνηκε μεγάλος για ένα σύγχρονο Η/Υ. Ετσι έψαξα τρόπους βελτίωσης του pdfocr script.
Σημείωση: χρησιμοποίησα το pdfocr.rb ver. 0.1.4 Copyright (c) 2010 Geza Kovacs
Αρχικά ανέλυσα τον τρόπο λειτουργίας του pdfocr επιλέγοντας τις εντολές και τα προγράμματα που επέτρεπαν δίγλωσση αναγνώριση OCR. Συνοπτικά τα βήματα/εντολές που εκτελεί το pdfocr για την επεξεργασία του example.pdf και παραγωγή του εμπλουτισμένου αρχείου final.pdf είναι:
Κώδικας: Επιλογή όλων
# pdfocr CLI steps using pdftk, pdftoppm, tesseract
# simplified by GeorgeVita (7-JAN-2017)
# from pdfocr.rb ver 0.1.4 Copyright (c) 2010 Geza Kovacs
#
pdftk example.pdf dump_data > pdfinfo.txt
pdftk example.pdf cat 5 output page005.pdf
pdftoppm -r 300 page005.pdf >page005.ppm
tesseract -l ell+eng page005.ppm page005_new pdf
pdftk *_new.pdf cat output merged.pdf
pdftk merged.pdf update_info pdfinfo.txt output final.pdf
#
# finally, delete all intermediate files
Απαιτούμενα προγράμματα για τα βήματα/εντολές του παραδείγματος:
tesseract-ocr, pdftoppm, pdftk και το αρχείο ελληνικών: tesseract-ocr-ell
Για να τρέξει το αρχικό script (pdfocr.rb) με δίγλωσση μετάφραση σε Ubuntu χρειάζονται:
- pdfocr (https://github.com/gkovacs/pdfocr)
- ruby, tesseract-ocr, tesseract-ocr-ell, pdftoppm, pdftk
- αλλαγή στη γραμμή #73 του pdfocr.rb από language = 'eng' σε language = 'ell+eng'
- εκκίνηση από το directory του pdfocr.rb με:
ruby pdfocr.rb -i example.pdf -o final.pdf
Σχετικά:
- PDFtk, παραδείγματα για τερματικό, PDFtk free for Windows (XP, 7, 8)
- Xpdf
- pdftoppm manual (Ubuntu)
- Tesseract OCR manual, command line usage