Parsing Objek Bentuk PDF dengan iTextSharp menggunakan .Net

Saya mencoba mengurai sekumpulan PDF yang memiliki bagian yang tampak seperti teks, namun kenyataannya hanyalah sekumpulan bentuk yang tersemat agar terlihat seperti teks, jadi ekstrak 'teks' itu menggunakan objek PdfTextExtractor normal di iTextSharp tidak dimungkinkan.

Karena teks yang saya coba ekstrak adalah satu dari hanya 10 kemungkinan kata, alih-alih 'membaca' kata tersebut (atau lebih tepatnya, 'bentuk dalam bentuk kata'), saya pikir saya dapat menentukan kata tersebut dengan membandingkan itu terhadap orang lain yang telah saya identifikasi.

Pertanyaan pertama saya adalah, Bagaimana cara membuka bagian PDF ini? Bagaimana saya menggunakan iText untuk mengurai dokumen untuk menelusuri objek bentuk ini? Ada kata umum yang memulai bagian ini di semua dokumen saya, jadi saya pikir saya bisa menggunakannya sebagai penanda untuk mengetahui kapan saya berada di area yang tepat, tapi bagaimana cara saya mengulangi semua bentuk dokumen?

Lalu, setelah saya menemukannya, bagaimana cara mengidentifikasi bentuk tertentu (segmen garis?) dari kata lain untuk menentukan huruf apa yang saya lihat?

Untuk mengilustrasikan masalahnya, berikut skenario yang sebanding - Bagian yang perlu saya uraikan adalah legenda peta, dan itu akan menjadi area PDF yang terlihat seperti ini:

-- LEGENDA --

  • jalan
  • jalan raya
  • sungai

Jika saya menemukan bentuk yang mewakili kata 'LEGENDA', saya tahu saya berada di area yang tepat, dan kemudian saya dapat mencoba menentukan kata apa yang ada dalam legenda (karena daftarnya terbatas sekitar 10 kata). Tapi bagaimana saya melakukan itu?

Saya menggunakan .NET, jadi contoh kode C# atau VB.Net apa pun bisa digunakan untuk saya.


person Avi    schedule 09.09.2011    source sumber


Jawaban (1)


Anda merasa kasihan.

Satu-satunya cara yang masuk akal untuk menangani hal semacam ini adalah melalui OCR. Pengenalan Karakter Optik. Setidaknya ada satu paket OCR open source yang layak untuk ditemukan, di kode Google.

Paket Pdf Parser belum menangani seni garis dengan cara apa pun. Jadi itu tidak berlaku kecuali Anda ingin menulis sendiri dukungannya.

Setelah Anda mengetahui contoh yang "baik" dari masing-masing 10 kata Anda, Anda MUNGKIN dapat membuat RegEx yang akan mendeteksi setiap kata secara konsisten. Ini akan gagal kecuali "teks" Anda selalu dalam "font" yang sama.

Anda harus mencari rangkaian perintah lineTo/curveTo/moveTo tertentu.

Anda harus mengabaikan koordinat di RegEx Anda, tetapi kemudian kembali dan menguraikannya jika Anda perlu menentukan kotak pembatas untuk kata tertentu.

Senang senang senang.

person Mark Storer    schedule 13.09.2011