Bagaimana cara mengekstrak teks dengan OCR dari PDF di Linux?

43

Bagaimana cara mengekstrak teks dari PDF yang tidak dibuat dengan indeks? Ini semua teks, tetapi saya tidak dapat mencari atau memilih apa pun. Saya menjalankan Kubuntu, dan Okular tidak memiliki fitur ini.

Helder S Ribeiro
sumber

Jawaban:

25

Saya telah sukses dengan port Linux BSD berlisensi sistem Oune Cuneiform .

Tampaknya tidak ada paket biner, jadi Anda perlu membuatnya dari sumber. Pastikan untuk menginstal pustaka ImageMagick C ++ untuk memiliki dukungan untuk dasarnya semua format gambar input (jika tidak hanya akan menerima BMP).

Walaupun tampaknya pada dasarnya tidak berdokumen selain dari file README singkat, saya telah menemukan hasil OCR yang cukup baik. Yang menyenangkan tentang itu adalah ia dapat menampilkan informasi posisi untuk teks OCR dalam format hOCR , sehingga memungkinkan untuk menempatkan teks kembali ke posisi yang benar di lapisan tersembunyi dari file PDF. Dengan cara ini Anda dapat membuat PDF yang "dapat dicari" dari mana Anda dapat menyalin teks.

Saya telah menggunakan hocr2pdf untuk membuat ulang PDF dari hasil PDF dan gambar OCR khusus gambar saja. Sayangnya, program ini tampaknya tidak mendukung pembuatan PDF multi-halaman, jadi Anda mungkin harus membuat skrip untuk menanganinya:

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

Harap perhatikan bahwa skrip di atas sangat sederhana. Misalnya, itu tidak mempertahankan metadata PDF apa pun.

Jukka Matilainen
sumber
Adakah ide untuk memperbaiki skrip ini untuk menambahkan tahap pemeriksaan ejaan untuk memperbaiki kesalahan dalam langkah pengenalan?
Gökhan Sever
@ Gökhan Sever, maksud Anda menambahkan pemeriksaan ejaan interaktif di mana pengguna diminta untuk penggantian kata yang salah eja / tidak dikenal? Saya pikir Anda bisa melakukannya dengan menambahkan sesuatu seperti aspell check --mode=html "$base.html"dalam skrip tepat setelah menjalankan runcing.
Jukka Matilainen
Ini adalah salah satu solusinya. Namun tanpa melihat keseluruhan konteks teks, sulit untuk melakukan koreksi. Akan lebih baik melihat antarmuka yang dibangun di dalam ocrfeeder.
Gökhan Sever
1
Ngomong-ngomong, saya menggunakan tesseract untuk pengenalan karakter: mengganti baris runcing dengan: tesseract "$ page" "$ base" hocr
Gökhan Sever
1
Koreksi kecil: Baris untuk tesseract setidaknya untuk bahasa lain selain bahasa Inggris, di sini misalnya Jerman (= deu) adalah: `tesseract" $ page "" $ base "-l deu hocr` (tentu saja Anda harus menghapus` `) .
Keks Dosis
14

Lihat apakah pdftotext akan bekerja untuk Anda. Jika tidak ada di mesin Anda, Anda harus menginstal paket poppler-utils

sudo apt-get install poppler-utils 

Anda mungkin juga menemukan toolkit pdf penggunaan.

Daftar lengkap perangkat lunak pdf di sini di wikipedia.

Sunting: Karena Anda memang membutuhkan kemampuan OCR, saya pikir Anda harus mencoba cara lain. (Yaitu saya tidak dapat menemukan konverter pdf2text linux yang melakukan OCR).

  • Konversikan pdf ke gambar
  • Pindai gambar ke teks menggunakan alat OCR

Konversi pdf ke gambar

  • gs: Perintah di bawah ini harus mengonversi pdf multi halaman ke file tiff individual.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = huruf -sOutputFile = nama file_% 04d.tif -dNOPAUSE -dBATCH - filename

  • Utilitas ImageMagik : Ada pertanyaan lain di situs SuperUser tentang menggunakan ImageMagik yang mungkin Anda gunakan untuk membantu Anda melakukan konversi.

    konversikan foo.pdf foo.png

Konversi gambar ke teks dengan OCR

Diambil dari daftar perangkat lunak OCR Wikipedia

Nagul
sumber
2
Apakah program ini juga berfungsi untuk dokumen teks tulisan tangan?
Ivo Flipse
1
Tidak, saya tidak berpikir itu memiliki kemampuan OCR. Itu hanya dapat mengekstrak teks yang tertanam dalam pdf. Halaman manual
nagul
Ya, ini berfungsi untuk dokumen pdf yang sudah disertakan dengan teks yang disematkan. Kasing saya persis di tempat yang tidak.
Helder S Ribeiro
1
@ obvio171 Menambahkan opsi terbaik yang bisa saya temukan agar OCR berfungsi dalam kasus Anda.
nagul
12

Google docs sekarang akan menggunakan OCR untuk mengonversi dokumen gambar / pdf yang Anda unggah menjadi teks. Saya telah sukses dengan itu.

Mereka menggunakan sistem OCR yang digunakan untuk proyek Google Buku raksasa .

Namun, harus dicatat bahwa hanya PDF dengan ukuran 2 MB yang akan diterima untuk diproses.

Pembaruan
1. Untuk mencobanya, unggah <2MB pdf ke google docs dari browser web.
2. Klik kanan pada dokumen yang diunggah dan klik "Buka dengan Google Documents".
... Google Documents akan mengonversi menjadi teks dan menghasilkan ke file baru dengan nama yang sama tetapi Google Documents ketik dalam folder yang sama.

Russ
sumber
Jawabannya tidak benar-benar spesifik untuk Ubuntu tetapi saya ingin benar-benar berterima kasih: solusi BRILLIANT! :)
Pitto
Ini sangat membantu :) Saya mengunggah file 50 MB kemarin dan berhasil. Sepertinya mereka telah meningkatkan batas ukuran.
Gaurav
2

Geza Kovacs telah membuat paket Ubuntu yang pada dasarnya menggunakan script hocr2pdfseperti yang disarankan Jukka, tetapi membuat segalanya lebih cepat untuk diatur.

Dari posting forum Ubuntu Geza dengan detail pada paket ...

Menambahkan repositori dan menginstal di Ubuntu

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

Menjalankan ocr pada file

pdfocr -i input.pdf -o output.pdf

Repositori GitHub untuk kode https://github.com/gkovacs/pdfocr/

ryanjdillon
sumber
2

Cara terbaik dan termudah di luar sana adalah menggunakannya pypdfocrtidak mengubah pdf

pypdfocr your_document.pdf

Pada akhirnya Anda akan memiliki your_document_ocr.pdfcara lain yang Anda inginkan dengan teks yang dapat dicari. Aplikasi tidak mengubah kualitas gambar. Menambah ukuran file sedikit dengan menambahkan teks overlay.

Pembaruan 3 November 2018:

pypdfocrtidak lagi didukung sejak 2016 dan saya melihat beberapa masalah karena tidak dibimbing. ocrmypdf( modul ) melakukan pekerjaan similiar dan dapat digunakan seperti ini:

ocrmypdf in.pdf out.pdf

Untuk memasang:

pip install ocrmypdf

atau

apt install ocrmypdf
Eduard Florinescu
sumber
1

PDFBeads berfungsi baik untuk saya. Utas ini " Mengonversi Gambar yang dipindai ke Satu File PDF " membuat saya aktif dan berjalan. Untuk pemindaian buku b & w, Anda perlu:

  1. Buat gambar untuk setiap halaman PDF; salah satu contoh gs di atas harus berfungsi
  2. Hasilkan output hOCR untuk setiap halaman; Saya menggunakan tesseract (tetapi perhatikan bahwa Cuneiform tampaknya bekerja lebih baik).
  3. Pindahkan gambar dan file hOCR ke folder baru; nama file harus sesuai, sehingga file001.tif perlu file001.html, file002.tif file002.html, dll.
  4. Di folder baru, jalankan

    pdfbeads * > ../Output.pdf
    

Ini akan menempatkan PDF OCR yang telah disusun dalam direktori induk.

scruss
sumber
1

skrip lain menggunakan tesseract:

#!/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"
Tolima
sumber
1

Pustaka OCR Asprise bekerja pada sebagian besar versi Linux. Ini dapat mengambil input dan output PDF sebagai pencarian PDF.

Ini paket komersial. Unduh salinan gratis Asprise OCR SDK untuk Linux di sini dan jalankan dengan cara ini:

aocr.sh input.pdf pdf

Catatan: 'pdf' mandiri menentukan format output.

Penafian: Saya adalah karyawan perusahaan yang memproduksi produk di atas.

Dukungan Asprise
sumber
Posting ini menyatakan bahwa produk dapat melakukannya, yang merupakan petunjuk bermanfaat yang harus diposting sebagai komentar. Itu tidak menjelaskan bagaimana sebenarnya memecahkan masalah, yang merupakan jawaban apa yang harus dilakukan. Dapatkah Anda memperluas jawaban Anda sehingga seseorang dapat melihat bagaimana melakukan solusi?
fixer1234
Terima kasih @ fixer1234, saya telah mengeditnya untuk memasukkan perintah.
Dukungan Kejutan
0

Coba Apache PDFBox untuk mengekstraksi konten teks dari File PDF. Dalam hal gambar yang disematkan ke file PDF gunakan ABBYY FineReader Engine CLI untuk Linux untuk mengekstraksi teks.

Praveen Kumar KR
sumber
Saya menemukan ABBYY OCR cukup menyedihkan, salah satu program yang paling tidak mampu saya coba. Mungkin cukup dengan gambar yang benar-benar bersih dari teks font standar ukuran teks tubuh tipikal, tanpa font campuran, ukuran campuran, tata letak yang rumit, grafik, garis, dll.
fixer1234
Ya saya juga mencoba, itu berfungsi dengan baik. Saya ragu, bisakah Anda membantu saya?
Praveen Kumar KR
Jika yang Anda butuhkan tidak tercakup dalam jawaban lain di sini, hal terbaik untuk dilakukan adalah mengajukan pertanyaan Anda sendiri. Itu akan membuatnya terpapar banyak mata.
fixer1234