Jak zamienić pdf na pdf z możliwością wyszukiwania tekstu?

20

Mam kilka zeskanowanych dokumentów w formacie pdf i chcę je wyszukać. Jak mogę to zrobić?

Zasadniczo muszę OCR pdf, a następnie mieszam wyodrębniony tekst z powrotem do nowego pdf. Bezskutecznie wypróbowałem wiele różnych rozwiązań (w tym te znajdujące się w części Dodawanie informacji o OCR do pliku PDF ).

  1. pdfocr (co daje mi ten problem: https://github.com/gkovacs/pdfocr/issues/7 )
  2. pdfsandwich (którego centrum oprogramowania twierdzi, że jest to kiepski pakiet i nie powinienem go instalować)
  3. OCRfeeder (w centrum oprogramowania) ładnie eksportuje do ODT, ale nie reaguje na eksport do pdf.
  4. Gscan2pdf eksportuje cały czarny (ale możliwy do przeszukiwania) obraz, jak zgłoszono w tej dyskusji .
  5. Nie sądzę, że przeglądarka Pdfxchange poradzi sobie z robieniem ocr w locie na plikach powyżej 500 stron.

Czy jest jakiś pakiet oprogramowania, którego nie znam? Lub skrypt, który to robi?

don.joey
źródło
3
Sam jeszcze tego nie wypróbowałem, ale widziałem, że ten projekt był polecany w przeszłości.
Glutanimate
Właśnie napisałem pdf2searchablepdf. To zależy tesseract. To dobrze działa. Bardzo łatwy w użyciu. Spójrz tutaj. askubuntu.com/a/1187881/327339
Gabriel Staples

Odpowiedzi:

12

Ubuntu <16.04

Po komentarzu Glutanimate znalazłem działające rozwiązanie. Jest to skrypt OCRmyPDF .

git clone https://github.com/jbarlow83/OCRmyPDF
cd OCRmyPDF
sh ./OCRmyPDF.sh -h  # to see the usage

Jeśli pojawi się komunikat, że powinieneś zainstalować GNU równolegle. Można to zrobić (zgodnie z /ubuntu//a/298598/115155 ) za pomocą (druga linia jest opcjonalna i zależy od smaku i wersji):

sudo apt-get install parallel
sudo rm /etc/parallel/config

Wreszcie możesz OCR swojego pliku PDF za pomocą polecenia:

sh ./OCRmyPDF.sh input.pdf output.pdf  # change input and output to the files you want

Jeśli wydaje się, że polecenie nie odpowiada, możesz zwiększyć gadatliwość za pomocą -vflagi (której można używać przyrostowo jako -vvlub -vvv). Najlepiej najpierw przetestować wyniki na krótszym pliku pdf. Możesz skrócić pdf w następujący sposób:

pdftk A=input.pdf cat A1-5 output output.pdf

Ubuntu> = 16,04

Począwszy od Ubuntu 16.04, OCRmyPDF stał się dostępny przez apt. Po prostu biegnij

sudo apt install ocrmypdf
ocrmypdf -h   # to see the usage

Wreszcie możesz OCR swojego pliku PDF za pomocą polecenia:

ocrmypdf input.pdf output.pdf  # change input and output to the files you want

Jeśli wydaje się, że polecenie nie odpowiada, możesz zwiększyć gadatliwość za pomocą -vflagi (której można używać przyrostowo jako -vvlub -vvv). Najlepiej najpierw przetestować wyniki na krótszym pliku pdf. Możesz skrócić pdf w następujący sposób:

pdftk A=input.pdf cat A1-5 output output.pdf

Jeśli masz jakieś pytania, zajrzyj do nowego repozytorium Github .

don.joey
źródło
Czy zaakceptowałbyś swoją odpowiedź, aby ją rozwiązać? (Aby nie znalazła się na liście bez odpowiedzi)
Zarejestrowany użytkownik
Tylko sudo -H pip install git+https://github.com/jbarlow83/OCRmyPDFdla Ubuntu 16.04
Martin Thoma
1
W przypadku Ubuntu 16.10 i nowszych możesz to zrobić sudo apt install ocrmypdf.
endolith
6

@ don.joey odpowiedział skryptem ocrmypdf . Można go jednak teraz zainstalować bezpośrednio (od 16.10).

sudo apt install ocrmypdf

Następnie musisz zainstalować potrzebne języki tesseract .

Aby wyświetlić listę języków, które są już w systemie, wpisz:

tesseract --list-langs

W przypadku pominięcia jednego, zainstaluj go. Na przykład,

sudo apt install tesseract-ocr-spa

Teraz możesz utworzyć plik PDF z możliwością wyszukiwania (którego jakość będzie się różnić w zależności od skanowanego dokumentu) za pomocą następującego polecenia

ocrmypdf -l 'spa' old.pdf new.pdf

Możesz oczywiście sprawdzić jego stronę podręcznika pod kątem dodatkowych opcji.

Ludenticus
źródło
Niech pan poprze głos!
don.joey
4

pdfsandwichwykonuje dokładnie tę pracę. Nie wiedziałem, że w centrum oprogramowania jest dostępny pakiet, ale udostępniam go w pakiecie debugującym Ubuntu na stronie projektu ( szczegółowe informacje można znaleźć na stronie http://www.tobias-elze.de/pdfsandwich/ ), w tym najnowszą wersję (0.1.2), która prawdopodobnie nie będzie jeszcze w żadnym centrum oprogramowania.

Jeśli masz zeskanowany plik scanned_file.pdf, po prostu zadzwoń

pdfsandwich scanned_file.pdf

który generuje plik scanned_file_ocr.pdfz rozpoznanym tekstem dodanym do skanowanych stron.

W porównaniu do większości istniejących rozwiązań, automatycznie wykrywa zainstalowaną wersję tesseract i odpowiednio dostosowuje swoje zachowanie. Ponadto wykonuje wstępne przetwarzanie zeskanowanych obrazów przed procesem OCR, takie jak usuwanie pochylenia lub usuwanie ciemnych krawędzi itp., Co może znacznie poprawić optyczne rozpoznawanie znaków.

ZASTRZEŻENIE: Jestem programistą pdfsandwichi dlatego jestem bardzo stronniczy.

Tobias Elze
źródło
Brzmi świetnie, ale dlaczego pdfsandwich wersja 0.1.4 zainstalowana przy użyciu apt-get przekształca dla mnie każdy znak w czarny prostokąt na Ubuntu 16.04?
Valentas,
1
Trudno odpowiedzieć bez dalszych szczegółów. Przede wszystkim polecam użyć nowszej wersji narzędzia. Obecna wersja to 0.1.6. Możesz znaleźć pakiety deb dla Ubuntu na stronie internetowej. Po drugie, jeśli to nie pomoże, możesz skorzystać z opcji -verbose, aby uzyskać dalsze szczegóły i użyć tych szczegółów do zgłoszenia zgłoszenia błędu.
Tobias Elze
kilka problemów dla mnie. konwersja: próba wykonania operacji niedozwolonej przez politykę bezpieczeństwa `PDF '@ error / constit.c / IsCoderAuthorized / 408. więc musiałem zainstalować imagemagick ze źródła pobranego ze imagemagick.org/script/install-source.php, a następnie wystąpił błąd podczas ładowania bibliotek współdzielonych: libMagickCore-7.Q16HDRI.so.6: nie można otworzyć pliku obiektu współdzielonego: „Nie ma takiego plik lub katalog ”” i to rozwiązanie działało, uruchamiając „sudo ldconfig / usr / local / lib” imagemagick wersja 7.0.8-56 otrzymana przez „ident -version”.
pierrely 27.07.19
warto dodawać te narzędzia, jeśli planujesz manipulować lub przycinać pliki PDF. 1. pdfshuffler do dzielenia lewej i prawej strony (dwustronnych oryginałów) 2. łańcuch pdf pdftk Użyj pdftk (jako pliku jar), aby osobno podzielić plik na strony parzyste i nieparzyste: 4, aby przyciąć strony pdfquench - potrzebowałem również gir1. 2-goocanvas-2.0 gir1.2-poppler-0.18 python-pygoocanvas python-poppler python-pypdf2. pdfsandwich również działał, zmniejszając rozmiar pliku nawet 10-krotnie. dzięki. Ubuntu 19.04 również pdfsam do dzielenia i scalania, działa jako plik jar Java po pobraniu
pierrely
0

OCRfeeder ma błąd

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/textobject.py

wiersz 436 powinien brzmieć:

            lines = asUnicode(stuff).strip().split('\n')
# bug here, was:
#            lines = '\n'.split(asUnicode(stuff).strip())

zmieniłem to i zadziałało dla mnie

AndreR
źródło
0

System operacyjny: Ubuntu 18.04

Najpierw zainstaluj za tesseract-ocrpomocą:

apt-cache show tesseract-ocr
sudo apt-get update && sudo apt-get upgrade
apt-get install tesseract-ocr --print-uris
apt-get install tesseract-ocr
sudo !!

Jeśli zamierzasz używać języka innego niż angielski z tesseract, musisz zainstalować odpowiedni pakiet laguage. Na przykład w przypadku języka portugalskiego musisz wykonać:

sudo apt-get install tesseract-ocr-por

W przeciwnym razie pojawi się błąd:

Error opening data file /usr/share/tesseract-ocr/4.00/tessdata/por.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your 
"tessdata" directory.
Failed loading language 'por'
Tesseract couldn't load any languages!
Could not initialize tesseract.

Jeśli Google „tesseract PDF” prawdopodobnie znajdzie ten nieco przestarzały post . Daje to jednak kilka przydatnych wskazówek. Najpierw musisz przekonwertować .pdfplik na .tiffjeden. Biegać:

convert -density 125 originalfile.pdf -depth 8 -alpha Off newfile.tiff

Jeśli, podobnie jak w nieaktualnym poście, zapomnisz dodać alpha -Off, pojawi się następujący błąd:

Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Error in pixReadFromTiffStream: spp not in set {1,3,4}

Teraz możesz uruchomić ostatnie polecenie. W szczególnym przypadku, gdy oryginalny plik PDF jest w języku portugalskim, będziesz potrzebować tego polecenia:

tesseract -l por newfile.tiff output pdf 

Wygenerowany plik zostanie nazwany output.pdf. Jeśli na przykład Twój plik PDF jest w języku francuskim, po zainstalowaniu odpowiedniego pliku tesseract-ocr-frauruchomisz:

tesseract -l fra newfile.tiff output pdf 

I pożądanym plikiem będzie ponownie output.pdf.

evaristegd
źródło
0

Miałem ten sam problem, więc napisałem to w weekend. Spróbuj; działa świetnie! Jest to proste opakowanie tesseract. Używa pdftoppmdo konwersji pliku PDF na kilka plików TIFF, a następnie używa tesseractdo ich wykonania OCR (optycznego rozpoznawania znaków) i generowania pliku PDF z możliwością wyszukiwania jako pliku wyjściowego. Wszystkie pośrednie pliki tymczasowe są automatycznie usuwane po zakończeniu skryptu.

Kod źródłowy: https://github.com/ElectricRCAircraftGuy/PDF2SearchablePDF

Instrukcje instalacji i użytkowania pdf2searchablepdf:

Testowane na Ubuntu 18.04 11 listopada 2019 r.

Zainstalować:

git clone https://github.com/ElectricRCAircraftGuy/PDF2SearchablePDF.git
./PDF2SearchablePDF/install.sh
sudo apt update
sudo apt install tesseract-ocr

Posługiwać się:

pdf2searchablepdf mypdf.pdf

Otrzymasz teraz pdf o nazwie mypdf_searchable.pdf , który zawiera tekst do przeszukiwania!

Gotowy. Opakowanie nie ma żadnych zależności w Pythonie, ponieważ obecnie jest napisane całkowicie w bash.

Referencje lub powiązane zasoby:

  1. PDF2SearchablePDF : https://github.com/ElectricRCAircraftGuy/PDF2SearchablePDF
  2. Jak zamienić pdf na pdf z możliwością wyszukiwania tekstu?
  3. Jakie jest najlepsze, najprostsze rozwiązanie OCR?
  4. Wyodrębnianie osadzonych obrazów z pliku PDF
  5. pdfsandwich : Właśnie odkryłem alternatywne opakowanie oprogramowania, które też warto sprawdzić! http://www.tobias-elze.de/pdfsandwich/
  6. /unix/301318/how-to-ocr-a-pdf-file-and-get-the-text-stored-within-pdf/551526#551526
  7. [jak zamienić plik PDF na kilka obrazów za pomocą pdftoppm] Wyodrębnianie osadzonych obrazów z pliku PDF
Gabriel Staples
źródło