Saya mencoba mengekstrak teks yang disertakan dalam file PDF ini menggunakan Python
.
Saya menggunakan modul PyPDF2 , dan memiliki skrip berikut:
import PyPDF2
pdf_file = open('sample.pdf')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
print page_content
Ketika saya menjalankan kode, saya mendapatkan output berikut yang berbeda dari yang disertakan dalam dokumen PDF:
!"#$%#$%&%$&'()*%+,-%./01'*23%4
5'%1$#26%3/%7/))/8%&)/26%8#3"%3"*%313/9#&)
%
Bagaimana saya bisa mengekstrak teks seperti pada dokumen PDF?
pdf_file = open('sample.pdf', 'rb')
?Jawaban:
Saya sedang mencari solusi sederhana untuk digunakan untuk python 3.x dan windows. Tampaknya tidak ada dukungan dari textract , yang sangat disayangkan, tetapi jika Anda mencari solusi sederhana untuk windows / python 3 paket tika , sangat mudah untuk membaca pdf.
Perhatikan bahwa Tika ditulis dalam Java sehingga Anda perlu menginstal Java runtime
sumber
Gunakan textract.
Ini mendukung banyak jenis file termasuk PDF
sumber
textract
adalah pembungkus untukPoppler:pdftotext
(antara lain).Lihatlah kode ini:
Outputnya adalah:
Menggunakan kode yang sama untuk membaca pdf dari 201308FCR.pdf . Outputnya normal.
Its dokumentasi menjelaskan mengapa:
sumber
Setelah mencoba textract (yang tampaknya memiliki terlalu banyak dependensi) dan pypdf2 (yang tidak dapat mengekstraksi teks dari pdf yang saya uji dengan) dan tika (yang terlalu lambat) saya akhirnya menggunakan
pdftotext
dari xpdf (seperti yang sudah disarankan dalam jawaban lain) dan baru saja memanggil biner dari python secara langsung (Anda mungkin perlu menyesuaikan path ke pdftotext):Ada pdftotext yang pada dasarnya melakukan hal yang sama tetapi ini mengasumsikan pdftotext di / usr / local / bin sedangkan saya menggunakan ini di AWS lambda dan ingin menggunakannya dari direktori saat ini.
Btw: Untuk menggunakan ini pada lambda Anda perlu memasukkan biner dan dependensi ke
libstdc++.so
dalam fungsi lambda Anda. Saya pribadi perlu mengkompilasi xpdf. Sebagai instruksi untuk ini akan meledakkan jawaban ini saya taruh di blog pribadi saya .sumber
Anda mungkin ingin menggunakan xPDF yang telah terbukti dan alat yang diturunkan untuk mengekstrak teks sebagai gantinya pyPDF2 memiliki berbagai masalah dengan ekstraksi teks.
Jawaban panjangnya adalah ada banyak variasi bagaimana sebuah teks dikodekan dalam PDF dan mungkin perlu mendekodekan string PDF itu sendiri, kemudian mungkin perlu memetakan dengan CMAP, kemudian mungkin perlu menganalisis jarak antara kata dan huruf dll.
Jika PDF rusak (yaitu menampilkan teks yang benar tetapi ketika menyalinnya membuat sampah) dan Anda benar-benar perlu mengekstraksi teks, maka Anda mungkin ingin mempertimbangkan untuk mengubah PDF menjadi gambar (menggunakan ImageMagik ) dan kemudian menggunakan Tesseract untuk mendapatkan teks dari gambar menggunakan OCR.
sumber
Saya sudah mencoba banyak konverter Python PDF, dan saya ingin memperbarui ulasan ini. Tika adalah salah satu yang terbaik. Tapi PyMuPDF adalah kabar baik dari pengguna @ehsaneha.
Saya melakukan kode untuk membandingkannya di: https://github.com/erfelipe/PDFtextExtraction Saya berharap dapat membantu Anda.
sumber
.encode('utf-8', errors='ignore')
Kode di bawah ini adalah solusi untuk pertanyaan dengan Python 3 . Sebelum menjalankan kode, pastikan Anda telah menginstal
PyPDF2
perpustakaan di lingkungan Anda. Jika tidak diinstal, buka prompt perintah dan jalankan perintah berikut:Kode Solusi:
sumber
PyPDF2 dalam beberapa kasus mengabaikan spasi putih dan membuat hasil teks berantakan, tapi saya menggunakan PyMuPDF dan saya sangat puas Anda dapat menggunakan tautan ini untuk info lebih lanjut
sumber
pip install pymupdf==1.16.16
. Menggunakan versi spesifik ini karena hari ini versi terbaru (17) tidak berfungsi. Saya memilih pymupdf karena mengekstrak bidang pembungkus teks di baris baru char\n
. Jadi saya mengekstraksi teks dari pdf ke string dengan pymupdf dan kemudian saya gunakanmy_extracted_text.splitlines()
untuk mendapatkan teks dipisah dalam garis, ke dalam daftar.pdftotext adalah yang terbaik dan paling sederhana! pdftotext juga menyimpan struktur.
Saya mencoba PyPDF2, PDFMiner dan beberapa lainnya tetapi tidak ada yang memberikan hasil yang memuaskan.
sumber
Collecting PDFMiner (from pdf2text)
,, jadi saya tidak mengerti jawaban ini sekarang.Anda dapat menggunakan PDFtoText https://github.com/jalan/pdftotext
PDF ke teks membuat lekukan format teks, tidak masalah jika Anda memiliki tabel.
sumber
Multi-halaman pdf dapat diekstraksi sebagai teks pada hamparan tunggal alih-alih memberikan nomor halaman individual sebagai argumen menggunakan kode di bawah ini
sumber
Berikut ini adalah kode paling sederhana untuk mengekstraksi teks
kode:
sumber
Saya menemukan solusi di sini PDFLayoutTextStripper
Itu bagus karena bisa menjaga tata letak PDF asli .
Ini ditulis dalam Java tetapi saya telah menambahkan Gateway untuk mendukung Python.
Kode sampel:
Contoh hasil dari PDFLayoutTextStripper :
Anda dapat melihat lebih detail di sini Stripper dengan Python
sumber
Saya mendapat pekerjaan yang lebih baik daripada OCR dan untuk mempertahankan perataan halaman saat mengekstraksi teks dari PDF. Harus membantu:
sumber
codec
arg . Saya memperbaikinya dengan menghapusnya yaitudevice = TextConverter(rsrcmgr, retstr, laparams=laparams)
Untuk mengekstraksi Teks dari PDF, gunakan kode di bawah ini
sumber
Saya menambahkan kode untuk mencapai ini: Ini berfungsi dengan baik untuk saya:
sumber
Anda dapat mengunduh tika-app-xxx.jar (terbaru) dari sini .
Kemudian letakkan file .jar ini di folder yang sama dengan file skrip python Anda.
lalu masukkan kode berikut dalam skrip:
Keuntungan dari metode ini:
lebih sedikit ketergantungan. File .jar tunggal lebih mudah untuk mengelola paket python itu.
dukungan multi-format. Posisi
source_pdf
dapat menjadi direktori dari segala jenis dokumen. (.doc, .html, .odt, dll.)mutakhir. tika-app.jar selalu merilis lebih awal dari versi yang relevan dari paket python tika.
stabil. Ini jauh lebih stabil dan terawat dengan baik (Didukung oleh Apache) daripada PyPDF.
kerugian:
Diperlukan jre-headless.
sumber
Jika Anda mencobanya di Anaconda pada Windows, PyPDF2 mungkin tidak menangani beberapa PDF dengan struktur non-standar atau karakter unicode. Saya sarankan menggunakan kode berikut jika Anda perlu membuka dan membaca banyak file pdf - teks semua file pdf dalam folder dengan jalur relatif
.//pdfs//
akan disimpan dalam daftarpdf_text_list
.sumber
PyPDF2 berfungsi, tetapi hasilnya dapat bervariasi. Saya melihat temuan yang tidak konsisten dari ekstraksi hasilnya.
sumber