Jak wyodrębnić tekst za pomocą OCR z pliku PDF w systemie Linux?
43
Jak wyodrębnić tekst z pliku PDF, który nie został zbudowany za pomocą indeksu? Cały tekst, ale nie mogę niczego wyszukiwać ani wybierać. Używam Kubuntu, a Okular nie ma tej funkcji.
Wydaje się, że żadne pakiety binarne nie są dostępne, więc musisz je zbudować ze źródła. Upewnij się, że zainstalowane są biblioteki ImageMagick C ++, aby obsługiwać zasadniczo dowolny format obrazu wejściowego (w przeciwnym razie akceptuje tylko BMP).
Chociaż wydaje się, że jest to zasadniczo nieudokumentowane oprócz krótkiego pliku README, wyniki OCR są całkiem dobre. Zaletą jest to, że może wyświetlać informacje o pozycji tekstu OCR w formacie hOCR , dzięki czemu możliwe jest umieszczenie tekstu z powrotem we właściwej pozycji w ukrytej warstwie pliku PDF. W ten sposób można tworzyć pliki PDF z możliwością wyszukiwania, z których można kopiować tekst.
Użyłem hocr2pdf do odtworzenia plików PDF z oryginalnych plików PDF z obrazami i wyników OCR. Niestety program nie obsługuje tworzenia wielostronicowych plików PDF, więc może być konieczne utworzenie skryptu do ich obsługi:
#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf
set -e
input="$1"
output="$2"
tmpdir="$(mktemp -d)"
# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"
# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
base="${page%.tiff}"
cuneiform -f hocr -o "$base.html" "$page"
hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done
# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf
rm -rf -- "$tmpdir"
Pamiętaj, że powyższy skrypt jest bardzo szczątkowy. Na przykład nie zachowuje żadnych metadanych PDF.
Masz pomysł na ulepszenie tego skryptu, aby dodać etap sprawdzania pisowni, aby poprawić błędy w kroku rozpoznawania?
Gökhan Sever
@ Gökhan Sever, czy masz na myśli dodanie interaktywnego sprawdzania pisowni, w którym użytkownik jest proszony o zastąpienie błędnie napisanych / nieznanych słów? Myślę, że możesz to zrobić, dodając coś aspell check --mode=html "$base.html"w skrypcie zaraz po uruchomieniu pisma klinowego.
Jukka Matilainen
To jest jedno rozwiązanie. Jednak nie widząc całego kontekstu tekstu, trudno jest wprowadzić poprawki. Fajniej byłoby zobaczyć interfejs wbudowany w ocrfeeder.
Gökhan Sever
1
Nawiasem mówiąc, używam tesseract do rozpoznawania znaków: zamieniając linię klinową na: tesseract „$ page” „$ base” hocr
Gökhan Sever
1
Mała korekta: Wiersz dla tesseract przynajmniej dla innych języków niż angielski, tutaj np. Niemiecki (= deu) to: `tesseract" $ page "" $ base "-l deu hocr` (oczywiście musisz usunąć ``) .
Keks Dose
14
Sprawdź, czy pdftotext będzie dla ciebie działał. Jeśli nie ma go na twoim komputerze, będziesz musiał zainstalować pakiet poppler-utils
Pełna lista oprogramowania pdf tutaj na wikipedii.
Edycja: Ponieważ potrzebujesz funkcji OCR, myślę, że będziesz musiał spróbować innego rozwiązania. (tzn. nie mogłem znaleźć linuksowego konwertera pdf2text, który robi OCR).
Konwertuj pdf na obraz
Zeskanuj obraz do tekstu za pomocą narzędzi OCR
Konwertuj pdf na obraz
gs: Poniższe polecenie powinno przekonwertować plik PDF na wiele stron na pojedyncze pliki tiff.
Narzędzia ImageMagik : na stronie SuperUser znajdują się inne pytania dotyczące korzystania z ImageMagik, które mogą pomóc w przeprowadzeniu konwersji.
Czy ten program działa również w przypadku odręcznych dokumentów tekstowych?
Ivo Flipse
1
Nie, nie sądzę, że ma możliwości OCR. Może po prostu wyodrębnić tekst osadzony w pliku pdf. Strona podręcznika
nagul
Tak, działa to w przypadku dokumentów pdf, które już zawierają osadzony tekst. Moja sprawa jest dokładnie taka, w której nie ma.
Helder S Ribeiro
1
@ obvio171 Dodano najlepszą opcję, jaką mogłem znaleźć, aby OCR działał w twoim przypadku.
nagul
12
Dokumenty Google będą teraz używać OCR do konwersji przesłanych dokumentów graficznych / pdf na tekst. Miałem z tym dobry sukces.
Korzystają z systemu OCR, który jest wykorzystywany w gigantycznym projekcie Google Books .
Należy jednak zauważyć, że tylko pliki PDF do rozmiaru 2 MB będą akceptowane do przetwarzania.
Aktualizacja
1. Aby wypróbować, prześlij <2 MB pdf do dokumentów Google z przeglądarki internetowej.
2. Kliknij prawym przyciskiem myszy przesłany dokument i kliknij „Otwórz za pomocą Dokumentów Google”.
... Dokumenty Google zostaną przekonwertowane na tekst i wydrukowane w nowym pliku o tej samej nazwie, ale Dokumenty Google zostaną zapisane w tym samym folderze.
Najlepszym i najłatwiejszym sposobem na jego użycie pypdfocrnie jest zmiana pliku pdf
pypdfocr your_document.pdf
Na koniec będziesz miał inny your_document_ocr.pdfsposób, w jaki chcesz, z tekstem do przeszukiwania. Aplikacja nie zmienia jakości obrazu. Zwiększa nieco rozmiar pliku, dodając tekst nakładki.
Aktualizacja 3 listopada 2018 r .:
pypdfocrnie jest już obsługiwany od 2016 r. i zauważyłem pewne problemy z powodu braku opieki. ocrmypdf( moduł ) wykonuje podobną pracę i może być używany w następujący sposób:
Utwórz obraz dla każdej strony pliku PDF; jeden z powyższych przykładów gs powinien działać
Wygeneruj wynik hOCR dla każdej strony; Użyłem tesseract (ale zauważ, że Cuneiform wydaje się działać lepiej).
Przenieś obrazy i pliki hOCR do nowego folderu; nazwy plików muszą się zgadzać, więc plik001.tif potrzebuje pliku001.html, file002.tif file002.html itp.
W nowym folderze uruchom
pdfbeads * > ../Output.pdf
Spowoduje to umieszczenie posortowanego pliku OCR w katalogu nadrzędnym.
#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt
set -e
input="$1"
output="$2"
tmpdir="$(mktemp -d)"
# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"
# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
base="${page%.tiff}"
tesseract "$base.tiff" $base
done
# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output
rm -rf -- "$tmpdir"
Ten post stwierdza, że produkt może to zrobić, co jest przydatną wskazówką, którą należy opublikować jako komentarz. Nie wyjaśnia, jak właściwie rozwiązać problem, co powinny zrobić odpowiedzi. Czy możesz rozszerzyć swoją odpowiedź, aby ktoś mógł zobaczyć, jak to zrobić?
fixer1234 12.03.15
Dzięki @ fixer1234, edytowałem go, aby uwzględnić polecenie.
Uważam, że ABBYY OCR jest dość żałosny, jeden z najmniej wydajnych programów, jakie wypróbowałem. Może to być odpowiednie z naprawdę czystym obrazem standardowego tekstu czcionki o typowym rozmiarze tekstu, bez mieszanych czcionek, mieszanych rozmiarów, złożonego układu, grafiki, linii itp.
fixer1234
Ja też próbowałem, działa dobrze. Mam wątpliwości, czy możesz mi pomóc?
Praveen Kumar KR
Jeśli w innych odpowiedziach nie ma tego, czego potrzebujesz, najlepiej zadać własne pytanie. To sprawi, że będzie narażony na wiele oczu.
Odpowiedzi:
Odniosłem sukces z licencjonowanym przez BSD portem Linux systemu Cuneiform OCR.
Wydaje się, że żadne pakiety binarne nie są dostępne, więc musisz je zbudować ze źródła. Upewnij się, że zainstalowane są biblioteki ImageMagick C ++, aby obsługiwać zasadniczo dowolny format obrazu wejściowego (w przeciwnym razie akceptuje tylko BMP).
Chociaż wydaje się, że jest to zasadniczo nieudokumentowane oprócz krótkiego pliku README, wyniki OCR są całkiem dobre. Zaletą jest to, że może wyświetlać informacje o pozycji tekstu OCR w formacie hOCR , dzięki czemu możliwe jest umieszczenie tekstu z powrotem we właściwej pozycji w ukrytej warstwie pliku PDF. W ten sposób można tworzyć pliki PDF z możliwością wyszukiwania, z których można kopiować tekst.
Użyłem hocr2pdf do odtworzenia plików PDF z oryginalnych plików PDF z obrazami i wyników OCR. Niestety program nie obsługuje tworzenia wielostronicowych plików PDF, więc może być konieczne utworzenie skryptu do ich obsługi:
Pamiętaj, że powyższy skrypt jest bardzo szczątkowy. Na przykład nie zachowuje żadnych metadanych PDF.
źródło
aspell check --mode=html "$base.html"
w skrypcie zaraz po uruchomieniu pisma klinowego.Sprawdź, czy pdftotext będzie dla ciebie działał. Jeśli nie ma go na twoim komputerze, będziesz musiał zainstalować pakiet poppler-utils
Możesz również znaleźć zestaw narzędzi pdf .
Pełna lista oprogramowania pdf tutaj na wikipedii.
Edycja: Ponieważ potrzebujesz funkcji OCR, myślę, że będziesz musiał spróbować innego rozwiązania. (tzn. nie mogłem znaleźć linuksowego konwertera pdf2text, który robi OCR).
Konwertuj pdf na obraz
gs: Poniższe polecenie powinno przekonwertować plik PDF na wiele stron na pojedyncze pliki tiff.
Narzędzia ImageMagik : na stronie SuperUser znajdują się inne pytania dotyczące korzystania z ImageMagik, które mogą pomóc w przeprowadzeniu konwersji.
Konwertuj obraz na tekst za pomocą OCR
Zaczerpnięte z Wikipedii z listą oprogramowania OCR
źródło
Dokumenty Google będą teraz używać OCR do konwersji przesłanych dokumentów graficznych / pdf na tekst. Miałem z tym dobry sukces.
Korzystają z systemu OCR, który jest wykorzystywany w gigantycznym projekcie Google Books .
Należy jednak zauważyć, że tylko pliki PDF do rozmiaru 2 MB będą akceptowane do przetwarzania.
Aktualizacja
1. Aby wypróbować, prześlij <2 MB pdf do dokumentów Google z przeglądarki internetowej.
2. Kliknij prawym przyciskiem myszy przesłany dokument i kliknij „Otwórz za pomocą Dokumentów Google”.
... Dokumenty Google zostaną przekonwertowane na tekst i wydrukowane w nowym pliku o tej samej nazwie, ale Dokumenty Google zostaną zapisane w tym samym folderze.
źródło
Geza Kovacs stworzył pakiet Ubuntu, który jest w zasadzie skryptem
hocr2pdf
używanym zgodnie z sugestią Jukki, ale przyspiesza konfigurację.Z postu na forum Ubezu Gezi ze szczegółami na temat pakietu ...
Dodanie repozytorium i instalacja w Ubuntu
Uruchamianie ocr na pliku
Repozytorium GitHub dla kodu https://github.com/gkovacs/pdfocr/
źródło
Najlepszym i najłatwiejszym sposobem na jego użycie
pypdfocr
nie jest zmiana pliku pdfNa koniec będziesz miał inny
your_document_ocr.pdf
sposób, w jaki chcesz, z tekstem do przeszukiwania. Aplikacja nie zmienia jakości obrazu. Zwiększa nieco rozmiar pliku, dodając tekst nakładki.Aktualizacja 3 listopada 2018 r .:
pypdfocr
nie jest już obsługiwany od 2016 r. i zauważyłem pewne problemy z powodu braku opieki.ocrmypdf
( moduł ) wykonuje podobną pracę i może być używany w następujący sposób:Żeby zainstalować:
lub
źródło
PDFBeads działa dla mnie dobrze. Ten wątek „ Konwertuj zeskanowane obrazy na pojedynczy plik PDF ” mnie uruchomił. Aby skanować książki czarno-białe, musisz:
W nowym folderze uruchom
Spowoduje to umieszczenie posortowanego pliku OCR w katalogu nadrzędnym.
źródło
inny skrypt używający tesseract:
źródło
Asprise OCR Library działa na większości wersji Linuksa. Może pobierać i wyprowadzać pliki PDF jako pliki PDF wyszukiwania.
To pakiet komercyjny. Pobierz bezpłatną kopię Asprise OCR SDK dla systemu Linux tutaj i uruchom ją w następujący sposób:
Uwaga: samodzielny plik „pdf” określa format wyjściowy.
Oświadczenie: Jestem pracownikiem firmy produkującej powyższe produkty.
źródło
Wypróbuj Apache PDFBox, aby wyodrębnić zawartość tekstową z pliku PDF. W przypadku obrazów osadzonych w plikach PDF do wyodrębnienia tekstu użyj ABBYY FineReader Engine CLI dla systemu Linux .
źródło