Cara Ekstrak Tabel di Dalam File PDF Menggunakan Library Python Camelot!

November 5, 2019


Hosting Unlimited Indonesia

Apa itu Camelot?

Camelot merupakan library python yang dapat digunakan untuk mengakses, mengekstrak, dan mengkonversi tabel yang terdapat dalam file PDF.


Mengapa Camelot?

  • Dengan menggunakan Camelot kita akan punya kuasa penuh terhadap tabel yang akan diekstrak atau dikelola, serta tabel hasil dari ekstrak tersebut cukup terjamin kualitasnya.
  • Tabel yang menurut kita buruk dapat dibuang berdasarkan parameter seperti akurasi dan spasi dari laporan matriks yang sudah disediakan.
  • Setiap tabel merupakan DataFrame dari library Pandas yang terintegrasi ke dalam alur kerja analisis data dan ETL (Extract Transform Load).
  • Selain digunakan untuk mengekstrak, Camelot juga dapat digunakan untuk mengkonversi tabel hasil ekstrak tersebut ke dalam format JSON, HTML, SQLITE, dan CSV.

Install Camelot

Ada beberapa cara untuk memasang Camelot di python namun sebelum itu saya infokan dulu jika pada artikel ini sistem yang digunakan adalah Linux Ubuntu 18.04 LTS.


Install via conda

Pertama kita bisa menggunakan conda, yang mana conda merupakan paket manajer dan environment management system untuk distribusi Anaconda.


conda install -c conda-forge camelot-py

Install via pip

Sebelum install melalui pip kita memerlukan beberapa paket dependensi seperti Tkinter dan ghostscript yang dapat dipasang dengan perintah apt-get.


sudo apt-get install python-tk ghostscript // Untuk python 2

sudo apt-get install python3-tk ghostscript // Untuk python 3

Kemudian silahkan memulai instalasi camelot via pip


pip install camelot-py[cv] // Untuk python 2

pip3 install camelot-py[cv] // Untuk python 3

Download Kode Sumber Camelot

Selain kedua cara di atas, kalian juga dapat memasang camelot dengan mendownload kode sumbernya terlebih dahulu yang ada di GitHub.


Clone kode sumber camelot dengan perintah git clone


git clone https://www.github.com/camelot-dev/camelot

Atau bisa masuk ke link github tersebut dan tekan tombol hijau di bawah ini


Ekstraks file camelot dan masuk ke dalam folder.


Sedangkan untuk instalasinya tetap gunakan pip.


pip install ".[cv]"

pip3 install ".[cv]"

Saran saya untuk kalian saat menginstall camelot, lebih baik install pada python versi 3 yang sudah ditentukan oleh camelot (3.5, 3.6, dan 3.7), alasan saya memberikan saran ini karena pada tanggal 1 Januari 2020 pdfminer.six sudah tidak didukung untuk python versi 2. pdfminner.six sendiri merupakan tools yang digunakan untuk mengekstrak informasi dari sebuah file pdf. Mana buktinya pdfminner.six tidak didukung pada python versi 2? Tenang, sebentar lagi akan dibuktikan.



Cek Versi Camelot

Gunakan –version untuk mengetahui versi dari camelot



Testing Camelot

Untuk menguji fitur camelot kalian dapat membuka python atau python3 di terminal atau koding lewat teks editor. Namun di sini saya lebih suka menggunakan teks editor dan mengeksekusi file nya via terminal.


Membaca File PDF

Sebelum memulai ngodingnya silahkan teman-teman download sampel file pdf di sini.


Selanjutnya, buka teks editor lalu buat file dengan nama sesuka kalian, simpan dengan ekstensi .py. Misalnya hello_camelot.py


Saatnya ngoding! hal pertama yang kita lakukan adalah import camelot.


import camelot

Gunakan fungsi read_pdf() dengan parameter nama file beserta ekstensinya, lalu tampung pada variabel tabel seperti di bawah ini.


import camelot
tabel = camelot.read_pdf('siswa.pdf')
print("tabel")

Eksekusi file di atas via terminal. (Jangan lupa jika kalian menjalankannya pada python versi 2, hilangkan tanda kurung pada print “tabel”)


python hello_camelot // python versi 2

python3 hello_camelot // python versi 3

Testing camelot pada python versi 2 (python).


Nah ini bukti yang saya janjikan sebelumnya, terlihat camelot dieksekusi dengan python versi 2 dan bisa kita lihat pula terdapat peringatan untuk upgrade ke python versi 3 jika masih ingin menggunakan tools pdfminer.six yang masih didukung.


Maka dari itu ketika file tersebut kita eksekusi dengan python3 maka aman-aman saja.


Penjelasan, kode di atas akan membaca file foo.pdf sekaligus mendeteksi keberadaan tabel dalam file foo.pdf, jika terdapat tabel maka akan keluar info tentang jumlah tabel yang ada dalam file tersebut.



Membaca File PDF yang Terkunci

Lalu bagaimana jika kita memiliki file pdf namun file tersebut memiliki password atau terkunci?


Mudah saja, namun sebelum itu silahkan download sampel pdf yang sudah diberi password berikut foo_pass.pdf. (password = 1234567890).


Untuk mengatasinya, masih tetap menggunakan fungsi read_pdf() namun kita tambahkan satu parameter lagi yaitu password di dalamnya. Dalam kasus ini kalian harus tahu apa password dari file pdf yang akan kalian baca.


import camelot
tabel = camelot.read_pdf('foo_pass.pdf',password='1234567890')
print("tabel")

Eksekusi via terminal dan lihat apakah berhasil?


python3 hello_camelot.py

Membaca Tabel Berdasarkan Halaman File PDF

Kemudian jika kita ingin mengetahui informasi tabel dari halaman tertentu bisa menggunakan parameter pages.


Seperti biasa dalam setiap kasus, sudah disediakan sampel pdf yang dapat kalian download. Untuk kasus ini silahkan download sampelnya di sini siswa_abc.pdf.


Pada sampel di atas terdapat 3 halaman yang masing-masing memiliki 5 tabel berisi informasi data siswa dan nilai pelajaran siswa, yang saya bedakan hanya kelasnya saja, selebihnya sama.


Lanjut, contoh kita sekarang ingin mengetahui informasi jumlah tabel yang ada pada halaman 2. Maka sederhana saja tinggal menambah parameter pages.


import camelot 
tabel = camelot.read_pdf('siswa_abc.pdf', pages='2') 
print('tabel')

Jika ingin mengetahui informasi jumlah tabel di lebih dari satu halaman, pisahkan dengan tanda koma


camelot.read_pdf('siswa_abc.pdf', pages='2, 3')

Atau ingin mengetahui informasi jumlah tabel dalam rentang halaman tertentu?


camelot.read_pdf('siswa_abc.pdf', pages='1-3')

Atau gabungan seperti ini juga bisa jika dalam file tersebut memiliki banyak halaman. Misal 100 halaman.


camelot.read_pdf('siswa_abc.pdf', pages='1-5, 20, 25, 50-55, 100')

Mengetahui Informasi Tabel di Dalam File PDF

Sebelumnya kita sudah berhasil membaca tabel, sekarang kita coba mengakses atau mengambil informasi lebih tentang tabel tersebut. Copy kode berikut dan pastikan file foo.pdf berada pada satu folder.


import camelot
tabel = camelot.read_pdf('foo.pdf')
tabel[0]

Jadi pada prosesnya, kita memiliki sebuah objek TableList yang tersimpan pada variabel tabel, yang mana jika kita panggil variabel tabel maka akan keluar informasi jumlah tabel dari satu halaman pada file pdf tersebut.


Sedangkan bila kita ingin mengakses tabel berdasarkan indeksnya tabel[0]. Maka kode di atas akan menampilkan informasi ukuran (baris x kolom) dari tabel pertama atau tabel dengan indeks ke-0.


Sekarang beralih menggunakan sampel siswa_abc.pdf. Kita akan mencoba mengambil informasi tabel seperti akurasi, spasi, urutan tabel, dan di halaman berapa tabel itu berada menggunakan properti parsing_report


import camelot
tabel = camelot.read_pdf('foo.pdf')
print(tabel[0].parsing_report)

Ekstrak Tabel di Dalam File PDF

Setelah dapat membaca dan mengakses tabel yang ada dalam file pdf, selanjutnya kita coba untuk mengekstrak tabel tersebut.


import camelot
tabel = camelot.read_pdf('foo.pdf')
print(tabel[0].df)

Kode di atas akan mengekstrak tabel sebagai pandas DataFrame dengan menggunakan properti objek tabel df.


Lalu bagaimana jika kita ingin menampilkan seluruh tabel yang ada pada satu halaman atau dibanyak halaman sekaligus?


Caranya mudah, bisa menggunakan for.


import camelot
tabel = camelot.read_pdf('siswa_abc.pdf' pages="1")
for x in range(0,3):
  print(tabel[x].df)

Kode di atas akan menampilkan tabel dengan indeks 0 sampai 2 (berarti tabel ke-1 sampai ke-3) pada halaman 1.


Ekstrak tabel di banyak halaman.


import camelot
tabel = camelot.read_pdf('siswa_abc.pdf' pages="1-3")
for x in range(0, 12):
  print(tabel[x].df)

Jika kode dieksekusi maka akan menampilkan tabel dengan indeks [0] sampai [11] (berarti tabel ke-1 sampai 12) pada halaman 1 sampai 3.



Export Tabel ke Format JSON, HTML, CSV, dan SQLITE

Ternyata, tabel yang berhasil diekstrak tersebut dapat kita ubah atau export ke dalam format lain dan bisa kita gunakan sesuka hati!


Pada camelot kita diberi kuasa untuk mengelola tabel yang akan diekstrak ke dalam format file JSON, HTML, CSV, dan SQLITE.


Untuk diubah ke format JSON menggunakan fungsi to_json


import camelot
tabel = camelot.read_pdf('foo.pdf')
tabel[0].to_json("foo.json")
print("Konversi File Berhasil!")

Ingin ke HTML? pakai fungsi to_html


import camelot
tabel = camelot.read_pdf('foo.pdf')
tabel[0].to_html("foo.html")
print("Konversi File Berhasil!")

Jika ingin dikonversi ke CSV agar lebih mudah diolah? gunakan to_csv


import camelot
tabel = camelot.read_pdf('foo.pdf')
tabel[0].to_csv("foo.csv")
print("Konversi File Berhasil!")

Sedangkan jika ingin tabel segera dijadikan database, bisa gunakan to_sqlite


import camelot
tabel = camelot.read_pdf('foo.pdf')
tabel[0].to_sqlite("foo.sqlite")
print("Konversi File Berhasil!")

Parameter dari fungsi to_json, to_csv, to_html, dan to_sqlite menandakan path atau lokasi tujuan dimana file hasil export tadi ingin disimpan.


Contoh di atas sejatinya hanya mengambil satu tabel dalam file pdf, namun bagaimana kalau kita ingin mengambil seluruhnya?


Nah kita gunakan fungsi export()


import camelot
tabel = camelot.read_pdf('siswa_abc.pdf')
tabel.export('siswa.csv')
print("Export Seluruh Tabel ke Format CSV Berhasil!")

Kode ini akan mengekstrak dan mengkonversi seluruh tabel pada halaman 1 ke lokasi yang sudah ditentukan ke dalam bentuk CSV.


Kalian juga dapat export tabel di lebih dari satu halaman ke dalam format lain (contoh: JSON).


import camelot
tabel = camelot.read_pdf('siswa_abc.pdf', pages='1-3')
tabel.export('siswa.json', f='json')
print("Export Seluruh Tabel ke Format JSON Berhasil!")

Contoh lain diubah ke format SQLITE dan disimpan ke dalam folder database.


import camelot
tabel = camelot.read_pdf('siswa_abc.pdf', pages='1-3')
tabel.export('database/siswa.sqlite', f='sqlite')
print("Export Seluruh Tabel ke Format SQLITE Berhasil!")

Bang mau tanya, apakah camelot bisa mengkompres file-file hasil konversi tadi menjadi satu ke dalam .zip?


Tenang saja, ini juga merupakan salah satu fitur keren dari camelot. Kita hanya perlu menambahkan parameter compress yang mana parameter ini memiliki tipe data boolean yang berarti jika tidak false ya true. Nilai defaultnya false. Jadi jika ingin mengaktifkannya harus diubah ke true.


import camelot
tabel = camelot.read_pdf('siswa_abc.pdf', pages='1-3')
tabel.export('siswa.html', f='html', compress='true')
print("Export Seluruh Tabel ke Format HTML Berhasil!")

Selesai sampai sini artikel Cara Ekstrak Tabel Dalam File PDF di Python Menggunakan Camelot. Jika ada pertanyaan, kritik, dan saran monggo ramaikan kolom komentar ya. 🙂


Referensi

https://camelot-py.readthedocs.io/en/master/


Kata Kunci

  • Install Camelot Pada Python di Linux Ubuntu
  • Konversi Tabel PDF ke JSON, HTML, CSV, dan SQLITE
Hosting Unlimited Indonesia

Kategori