Bagaimana cara mengekstrak teks dari PDF? [Tutup]

152

Adakah yang bisa merekomendasikan perpustakaan / API untuk mengekstraksi teks dan gambar dari PDF? Kita harus dapat melihat teks yang terdapat di wilayah dokumen yang diketahui sebelumnya, sehingga API akan perlu memberi kami informasi posisi setiap elemen pada halaman.

Kami ingin agar data menjadi keluaran xmlatau jsonformat. Kami sedang melihat PdfTextStream yang tampaknya cukup bagus, tetapi ingin mendengar pengalaman dan saran orang lain.

Apakah ada alternatif (komersial atau gratis) untuk mengekstraksi teks dari pdf secara programatik?

Budda007
sumber
1
Bagi mereka yang membutuhkan sesuatu yang sangat sederhana (tidak ada posisi Info), regex perl ini mungkin cukup: /^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg. Itu hanya mencari operator Tj / TJ, yang menunjukkan semua teks normal dalam PDF.
Alex R
1
gunakan perpustakaan TomRoush PdfBox ini berfungsi baik di android
FaisalAhmed

Jawaban:

113

Saya diberi file pdf 400 halaman dengan tabel data yang harus saya impor - untungnya tidak ada gambar. Ghostscript bekerja untuk saya:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

File keluaran dibagi menjadi beberapa halaman dengan tajuk, dll., Tetapi kemudian mudah untuk menulis aplikasi untuk menghapus baris kosong, dll, dan menyedot semua 30.000 catatan. -dSIMPLEdan -dCOMPLEXtidak ada perbedaan dalam hal ini.

pengguna2176753
sumber
37
Di linux dan cygwin perintahnya gsbukan gswin64c. Bekerja dengan sempurna. Tidak ada omong kosong berbayar yang dipatenkan. Itu hanya bekerja.
Jannes
4
Ya, bekerja dengan baik! Sekarang saya bisa menggunakan "grep" dengan impunitas pada file pdf saya. Karena saya bisa mendapatkan lebih baik daripada yang bisa saya baca, itu adalah kemenangan! (:-) Suara positif.
David Elson
1
Satu-satunya masalah yang saya miliki dengan menggunakannya pada pdf dengan font 'lama' yang tertanam. Berfungsi sempurna untuk pdf yang dibuat secara lokal, tetapi lebih sulit dengan sumber yang tidak jelas. Kalau tidak, scriptlet yang bagus.
Jon M
apa yang -sDEVICE=txtwriteharus dilakukan Saya tidak mengerti banyak setelah membaca Cara Menggunakan Ghostscript | Memilih perangkat keluaran
Ooker
Untuk keluaran stdout alih-alih menyimpan sebagai file teks, gunakan gswin64c -sDEVICE=txtwrite -o- input.pdf. Sumber (sedikit berubah oleh saya): gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526ac
LuH
33

Sejak hari ini saya mengetahuinya: hal terbaik untuk ekstraksi teks dari PDF adalah TET, toolkit ekstraksi teks . TET adalah bagian dari rangkaian produk PDFlib.com.

PDFlib.com adalah perusahaan Thomas Merz. Jika Anda tidak mengenali namanya: Thomas Merz adalah penulis "PostScript dan PDF Bible".

Inkarnasi pertama TET adalah perpustakaan . Yang satu itu mungkin dapat melakukan semua yang diinginkan Budda006, termasuk informasi posisi tentang setiap elemen pada halaman. Oh, dan itu juga bisa mengekstrak gambar. Ini menggabungkan gambar yang terfragmentasi menjadi potongan-potongan.

pdflib.com juga menawarkan inkarnasi lain dari teknologi ini, plugin TET untuk Acrobat . Dan inkarnasi ketiga adalah PDFlib TET iFilter . Ini adalah alat mandiri untuk desktop pengguna. Keduanya gratis (seperti bir) untuk digunakan untuk keperluan pribadi, non-komersial.

Dan itu sangat kuat. Jauh lebih baik daripada ekstraksi teks Adobe sendiri. Ini mengekstraksi teks untuk saya di mana alat lain (termasuk Adobe) memang memuntahkan sampah saja.

Saya baru saja menguji alat standalone desktop, dan apa yang mereka katakan di halaman web mereka benar. Ini memiliki commandline yang sangat bagus. Beberapa file tes PDF "bermasalah" saya yang ditangani alat ini dengan kepuasan penuh.

Hal ini akan menjadi rekomendasi saya untuk setiap persyaratan ekstraksi teks PDF yang canggih dan menantang.

TET sangat mengagumkan. Mendeteksi tabel. Di dalam tabel, ini mengidentifikasi sel yang mencakup beberapa kolom. Ini mengidentifikasi baris tabel dan konten dari setiap sel tabel secara terpisah. Ini berurusan dengan sangat baik dengan tanda hubung: menghilangkan tanda hubung dan mengembalikan kata lengkap. Ini mendukung bahasa non-ASCII (termasuk CJK, Arab dan Ibrani). Saat menemukan ligatur, mengembalikan karakter asli ...

Cobalah.

Kurt Pfeifle
sumber
32
Tidak ada versi percobaan, dan $ 440 sedikit banyak untuk "Cobalah."
Rok Strniša
Apakah layanan ini tersedia melalui API?
Bart
1
saya mengujinya, tidak mengenali kolom. Saya memindai halaman depan tabloid bahasa Inggris. Teks itu dibagi menjadi 3 kolom di atas kertas, tetapi plugin ini mencampur kalimat-kalimat itu secara keseluruhan sehingga membuatnya tampak seperti omong kosong. Ghostscript yang gratis memiliki output yang sama persis.
NoWhereToBeSeen
1
@RedHotScalability: Juga BTW, TET tidak mengenali colums jika digunakan dengan parameter yang benar. Tapi saya meninggalkannya sebagai latihan untuk penulis JS yang ambisius untuk membaca dokumentasi dan mencari tahu bagaimana ...
Kurt Pfeifle
29

Alat baris perintah yang efisien, sumber terbuka, bebas biaya apa pun, tersedia di linux & windows: cukup bernama pdftotext. Alat ini adalah bagian dari perpustakaan xpdf.

http://en.wikipedia.org/wiki/Pdftotext

131
sumber
4
Pada sidenote: gunakan -layoutsakelar untuk menyimpan tabel, bekerja dengan cukup baik.
sebastian
12

Ini saran saya. Jika Anda ingin mengekstraksi teks dari PDF, Anda dapat mengimpor file pdf ke Google Documents, lalu mengekspornya ke format yang lebih ramah seperti .html, .odf, .rtf, .txt, dll. Semua ini menggunakan Drive API . Gratis * dan tangguh. Melihat:

https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get

Karena ini adalah API lainnya, ini kompatibel dengan SEMUA bahasa pemrograman. Tautan yang saya poskan di atas memiliki contoh yang berfungsi untuk banyak bahasa termasuk: Java, .NET, Python, PHP, Ruby, dan lainnya.

Saya harap ini membantu.

oabarca
sumber
2
Saya telah menggunakan opsi itu dan saya tidak akan merekomendasikannya. Ekstraksi teks pdf Google tidak sebagus banyak alternatif (terutama untuk non-Inggris) dan juga sangat sangat sloooow.
Björn Lindqvist
10

PdfTextStream (yang Anda katakan telah Anda lihat) sekarang gratis untuk aplikasi berulir tunggal. Menurut pendapat saya kualitasnya jauh lebih baik daripada perpustakaan lain (terutama untuk hal-hal seperti font yang tertanam funky, dll).

Atau, Anda harus melihat di Apache PDFBox , open source.

Renaud
sumber
PdfTextStream di tidak didukung di android. Apakah ada perpustakaan yang bagus seperti ini tersedia untuk android?
FaisalAhmed
@FaisalAhmed bagaimana dengan PDFBox?
Renaud
Ya PdfBox juga tidak didukung di android .... baik PdfTextStream dan PdfBox menggunakan beberapa bagian awt yang tidak didukung di android
FaisalAhmed
saya menggunakan perpustakaan ini yang berfungsi baik di android github.com/TomRoush/PdfBox-Android
FaisalAhmed
6

Salah satu komentar di sini menggunakan gs di Windows. Saya juga sukses dengan Linux / OSX, dengan sintaks berikut:

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

Saya menggunakan dSIMPLEbukan dCOMPLEXkarena yang terakhir menghasilkan 1 karakter per baris.

kvz
sumber
5

Karena pertanyaannya secara khusus tentang alat alternatif untuk mendapatkan data dari PDF sebagai XML, maka Anda mungkin tertarik untuk melihat alat komersial "ByteScout PDF Extractor SDK" yang mampu melakukan hal ini: ekstrak teks dari PDF sebagai XML bersama dengan data pemosisian (x, y) dan informasi font:

Teks dalam sumber PDF:

Products | Units | Price 

Output XML:

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

PS: selain itu juga memecah teks menjadi struktur berbasis tabel.

Pengungkapan: Saya bekerja untuk ByteScout

Eugene
sumber
3

Hal terbaik yang saat ini dapat saya pikirkan (dalam daftar alat "sederhana") adalah Ghostscript (versi saat ini adalah v.8.71) dan program utilitas PostScript ps2ascii.ps. Ghostscript mengirimkannya dalam libsubdirektori. Coba ini (di Windows):

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

Perintah ini memproses halaman 3-7 dari input.pdf. Baca komentar dalam ps2ascii.psfile itu sendiri untuk melihat apa arti angka "aneh" dan info tambahan tambahan ( menunjukkan string, posisi, lebar, warna, gambar, persegi panjang, font, dan page break ... ). Untuk mendapatkan output teks "sederhana", ganti -dCOMPLEXbagian dengan -dSIMPLE.

Kurt Pfeifle
sumber
2
Seperti yang Anda duga, ini hanya menghasilkan tes ASCII. Meskipun gratis, bukan pilihan yang bagus untuk perangkat lunak yang Anda rencanakan dengan bahasa selain bahasa Inggris.
userx
3
@ penggunax: Seperti yang bisa Anda tebak, ini adalah perangkat lunak Gratis: karena itu kode sumber tersedia. Kemungkinan memperluas dukungan untuk non-ASCII ...
Kurt Pfeifle
@userx: hari ini saya menemukan 'TET', Toolkit Ekstraksi Teks dari pdflib.com. Lihat jawaban saya yang lain.
Kurt Pfeifle
ps2ascii dari Ghostscript 9.07 bekerja dengan baik pada sistem OpenBSD saya. Saya baru saja mengkonversi PDF setebal 526 halaman menjadi teks biasa. Sekarang saya dapat dengan mudah menangkap dan mengekstrak teks untuk catatan. Saya menggunakan perintah sederhana ps2ascii book.pdf notes.txt. Jika dokumen Anda didominasi ASCII, Anda beruntung.
Clint Pachl
3

Saya tahu bahwa topik ini sudah cukup lama, tetapi kebutuhan ini masih hidup. Saya membaca banyak dokumen, forum, dan skrip dan membuat dokumen lanjutan baru yang mendukung pdf terkompresi dan tidak terkompresi:

https://gist.github.com/smalot/6183152

Dalam beberapa kasus, baris perintah dilarang karena alasan keamanan. Jadi kelas PHP asli dapat memenuhi banyak kebutuhan.

Semoga ini bisa membantu semua orang

Sebastien Malot
sumber
1

QuickPDF tampaknya menjadi perpustakaan yang masuk akal yang harus melakukan apa yang Anda inginkan dengan harga yang wajar.

http://www.quickpdflibrary.com/ - Mereka memiliki uji coba 30 hari.

Andrew Cash
sumber
0

Pada sistem Macintosh saya, saya menemukan bahwa "Adobe Reader" melakukan pekerjaan yang cukup baik. Saya membuat alias di Desktop saya yang menunjuk ke "Adobe Reader.app", dan semua yang saya lakukan adalah menjatuhkan file pdf pada alias, yang menjadikannya dokumen aktif di Adobe Reader, dan kemudian dari menu File, Saya memilih "Simpan sebagai Teks ...", berikan nama dan tempat untuk menyimpannya, klik "Simpan", dan saya selesai.

Dick Guertin
sumber
5
OP mencari solusi untuk mengekstraksi teks dari pdf secara terprogram . Jawaban Anda mengusulkan rutin manual sebagai gantinya.
mkl