Saya memiliki ribuan dokumen dan beberapa di antaranya dipindai. Jadi saya perlu skrip untuk menguji semua file PDF milik direktori. Apakah ada cara sederhana untuk melakukan itu?
- Sebagian besar PDF adalah laporan. Dengan demikian mereka memiliki banyak teks.
Mereka sangat berbeda, tetapi yang dipindai seperti yang disebutkan di bawah ini dapat menemukan beberapa teks karena proses OCR genting ditambah dengan pemindaian.
Usulan dari Sudodus dalam komentar di bawah ini tampaknya sangat menarik. Lihatlah perbedaan antara PDF yang dipindai dan yang tidak dipindai:
Dipindai:
grep --color -a 'Image' AR-G1002.pdf
<</BitsPerComponent 8/ColorSpace/DeviceRGB/Filter[/DCTDecode]/Height 2197/Length 340615/Name/Obj13/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 40452/Name/Obj18/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 41680/Name/Obj23/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 41432/Name/Obj28/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 59084/Name/Obj33/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 8/ColorSpace/DeviceRGB/Filter[/DCTDecode]/Height 2197/Length 472681/Name/Obj38/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 8/ColorSpace/DeviceRGB/Filter[/DCTDecode]/Height 2197/Length 469340/Name/Obj43/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 8/ColorSpace/DeviceRGB/Filter[/DCTDecode]/Height 2197/Length 371863/Name/Obj48/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 8/ColorSpace/DeviceRGB/Filter[/DCTDecode]/Height 2197/Length 344092/Name/Obj53/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 59416/Name/Obj58/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 48308/Name/Obj63/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 51564/Name/Obj68/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 63184/Name/Obj73/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 40824/Name/Obj78/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 23320/Name/Obj83/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 31504/Name/Obj93/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 18996/Name/Obj98/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 8/ColorSpace/DeviceRGB/Filter[/DCTDecode]/Height 2197/Length 292932/Name/Obj103/Subtype/Image/Type/XObject/Width 1698>>stream
<</BitsPerComponent 1/ColorSpace/DeviceGray/DecodeParms<</Columns 1698/K -1>>/Filter/CCITTFaxDecode/Height 2197/Length 27720/Name/Obj108/Subtype/Image/Type/XObject/Width 1698>>stream
<rdf:li xml:lang="x-default">Image</rdf:li>
<rdf:li xml:lang="x-default">Image</rdf:li>
Tidak dipindai:
grep --color -a 'Image' AR-G1003.pdf
<</Lang(en-US)/MarkInfo<</Marked true>>/Metadata 167 0 R/Pages 2 0 R/StructTreeR<</Contents 4 0 R/Group<</CS/DeviceRGB/S/Transparency/Type/Group>>/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<</Font<</F1 5 0 R/F2 7 0 R/F3 9 0 R/F4 11 0 R/F5 13 0 R>>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/StructParents 0/Tabs/S/Type/<</Filter/FlateDecode/Length 5463>>stream
<</BaseFont/Times#20New#20Roman,Bold/Encoding/WinAnsiEncoding/FirstChar 32/FontD<</Ascent 891/AvgWidth 427/CapHeight 677/Descent -216/Flags 32/FontBBox[-558 -216 2000 677]/FontName/Times#20New#20Roman,Bold/FontWeight 700/ItalicAngle 0/Leadi<</BaseFont/Times#20New#20Roman/Encoding/WinAnsiEncoding/FirstChar 32/FontDescri<</Ascent 891/AvgWidth 401/CapHeight 693/Descent -216/Flags 32/FontBBox[-568 -216 2000 693]/FontName/Times#20New#20Roman/FontWeight 400/ItalicAngle 0/Leading 42<</BaseFont/Arial,Bold/Encoding/WinAnsiEncoding/FirstChar 32/FontDescriptor 10 0<</Ascent 905/AvgWidth 479/CapHeight 728/Descent -210/Flags 32/FontBBox[-628 -210 2000 728]/FontName/Arial,Bold/FontWeight 700/ItalicAngle 0/Leading 33/MaxWidth<</BaseFont/Times#20New#20Roman,Italic/Encoding/WinAnsiEncoding/FirstChar 32/FontDescriptor 12 0 R/LastChar 118/Name/F4/Subtype/TrueType/Type/Font/Widths 164 0 <</Ascent 891/AvgWidth 402/CapHeight 694/Descent -216/Flags 32/FontBBox[-498 -216 1333 694]/FontName/Times#20New#20Roman,Italic/FontWeight 400/ItalicAngle -16.4<</BaseFont/Arial/Encoding/WinAnsiEncoding/FirstChar 32/FontDescriptor 14 0 R/La<</Ascent 905/AvgWidth 441/CapHeight 728/Descent -210/Flags 32/FontBBox[-665 -210 2000 728]/FontName/Arial/FontWeight 400/ItalicAngle 0/Leading 33/MaxWidth 2665<</Contents 16 0 R/Group<</CS/DeviceRGB/S/Transparency/Type/Group>>/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<</Font<</F1 5 0 R/F2 7 0 R/F5 13 0 R>>/ProcSet[<</Filter/FlateDecode/Length 7534>>streamarents 1/Tabs/S/Type/Page>>
<</Contents 18 0 R/Group<</CS/DeviceRGB/S/Transparency/Type/Group>>/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<</Font<</F1 5 0 R/F2 7 0 R/F5 13 0 R>>/ProcSet[<</Filter/FlateDecode/Length 6137>>streamarents 2/Tabs/S/Type/Page>>
<</Contents 20 0 R/Group<</CS/DeviceRGB/S/Transparency/Type/Group>>/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<</Font<</F1 5 0 R/F2 7 0 R/F5 13 0 R/F6 21 0 R><</Filter/FlateDecode/Length 6533>>stream>>/StructParents 3/Tabs/S/Type/Page>>
<</BaseFont/Times#20New#20Roman/DescendantFonts 22 0 R/Encoding/Identity-H/Subty<</BaseFont/Times#20New#20Roman/CIDSystemInfo 24 0 R/CIDToGIDMap/Identity/DW 100<</Ascent 891/AvgWidth 401/CapHeight 693/Descent -216/Flags 32/FontBBox[-568 -216 2000 693]/FontFile2 160 0 R/FontName/Times#20New#20Roman/FontWeight 400/Italic<</Contents 27 0 R/Group<</CS/DeviceRGB/S/Transparency/Type/Group>>/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<</ExtGState<</GS28 28 0 R/GS29 29 0 R>>/Font<</F1 5 0 R/F2 7 0 R/F3 9 0 R/F5 13 0 R/F6 21 0 R>>/ProcSet[/PDF/Text/ImageB/ImageC<</Filter/FlateDecode/Length 5369>>streamge>>
Jumlah gambar per halaman jauh lebih besar (sekitar satu per halaman)!
command-line
pdf
DanielTheRocketMan
sumber
sumber
pdf
file berisi gambar (dimasukkan dalam dokumen di samping teks atau sebagai seluruh halaman, 'pdf yang dipindai'), file tersebut sering (mungkin selalu) berisi string/Image/
, yang dapat ditemukan dengan baris perintahgrep --color -a 'Image' filename.pdf
. Ini akan memisahkan file yang hanya berisi teks dari yang berisi gambar (gambar halaman penuh serta halaman teks dengan logo kecil dan gambar ilustrasi berukuran sedang).Jawaban:
Shellscript
Jika
pdf
file berisi gambar (disisipkan dalam dokumen di samping teks atau sebagai seluruh halaman, 'pdf dipindai'), file sering (mungkin selalu) berisi string/Image/
.Dengan cara yang sama Anda dapat mencari string
/Text
untuk mengetahui apakah file pdf berisi teks (tidak dipindai).Saya membuat shellscript
pdf-text-or-image
, dan itu mungkin berfungsi dalam banyak kasus dengan file Anda. Shellscript terlihat untuk string teks/Image/
dan/Text
dalampdf
file.Jadikan skrip shell dapat dieksekusi,
Ubah direktori ke tempat Anda memiliki
pdf
file dan jalankan shellscript.File yang diidentifikasi dipindahkan ke subdirektori berikut
scanned
text
s-and-t
(untuk dokumen dengan gambar [yang dipindai?] dan konten teks)Objek file yang tidak dikenal, 'UFO', tetap berada di direktori saat ini.
Uji
Saya menguji shellscript dengan dua file Anda,
AR-G1002.pdf
danAR-G1003.pdf
, dan dengan beberapapdf
file sendiri (yang saya buat menggunakan Libre Office Impress).Mari kita berharap demikian
sumber
grep -q
grep -q
keluar segera dengan status nol jika ada kecocokan yang ditemukan (alih-alih mencari seluruh file).cd <path to dir>
Semua file pdf yang dipindai akan tetap berada di folder dan file lain akan pindah ke folder lain.
sumber
file pdf-filename.pdf
akan menghasilkan nomor versi. Saya tidak dapat mencari teks tertentu di BR-L1411-3.pdf BR-L1411-3.pdf: dokumen PDF, versi 1.3 tetapi dapat mencari teks di kedua file lain yang Anda berikan, yaitu versi 1.5 dan 1.6 dan dapatkan satu atau lebih kecocokan. Saya menggunakan penampil PDF XChange untuk mencari file-file ini tetapi memiliki hasil yang sama dengan evince. dokumen versi 1.3 tidak cocok dengan apa pun.file
membantu dalam menyelesaikan proyek Anda. Meskipun saya sepertinya orang lain masih tidak jelas tentang apa yang ingin Anda capai.Saya membuat skrip untuk mendeteksi apakah PDF itu OCRd. Gagasan utama: Dalam OCRd PDF adalah teks tidak terlihat.
Algoritma untuk menguji apakah PDF yang diberikan (
f1
) adalah OCRd:f1
catatan sebagaif2
f2
f1
danf2
f1
adalah OCRd jika semua gambarf1
danf2
identik.https://github.com/jfilter/pdf-scripts/blob/master/is_ocrd_pdf.sh
sumber
Hobbyist menawarkan solusi yang baik jika dokumen yang dipindai koleksi dokumen tidak memiliki teks yang ditambahkan dengan optical character recognition (OCR). Jika ini suatu kemungkinan, Anda mungkin ingin melakukan beberapa skrip yang membaca output
pdfinfo -meta
dan memeriksa alat yang digunakan untuk membuat file, atau menggunakan rutin Python yang menggunakan salah satu pustaka Python untuk memeriksanya. Mencari teks dengan alat sepertistrings
ini tidak akan dapat diandalkan karena konten PDF dapat dikompresi. Dan memeriksa alat pembuatan juga tidak aman, karena halaman PDF dapat digabungkan; Saya secara rutin menggabungkan dokumen teks PDF dengan gambar yang dipindai untuk menyatukan semuanya.Maaf saya tidak dapat menawarkan saran khusus. Sudah lama sejak saya melihat struktur internal PDF, tetapi tergantung pada seberapa ketat persyaratan Anda, Anda mungkin ingin tahu bahwa itu agak rumit. Semoga berhasil!
sumber
Jika ini lebih tentang mendeteksi apakah PDF dibuat dengan memindai daripada pdf memiliki gambar daripada teks maka Anda mungkin perlu menggali metadata file, bukan hanya konten.
Secara umum, untuk file yang dapat saya temukan di komputer saya dan file pengujian Anda, berikut ini benar:
Saya menggunakan Windows saat ini, jadi saya menggunakan
node.js
contoh berikut:Untuk menjalankannya, Anda harus menginstal Node.js (harus berupa satu perintah) dan Anda juga perlu memanggil:
Pemakaian:
Contoh ini tidak dianggap sebagai solusi selesai, tetapi dengan
debug
flag, Anda mendapatkan beberapa informasi meta informasi file:Fungsi naif yang saya tulis memiliki kesuksesan 100% pada dokumen yang dapat saya temukan di komputer saya (termasuk sampel Anda). Saya memberi nama file berdasarkan status mereka sebelum menjalankan program, untuk memungkinkan untuk melihat apakah hasilnya benar.
Anda dapat menggunakan mode debug bersama dengan sedikit pemrograman untuk meningkatkan hasil Anda. Anda dapat meneruskan output program ke program lain, ia akan selalu memiliki satu jalur penuh per baris.
sumber
2 cara yang bisa saya pikirkan:
Menggunakan alat teks pilih: jika Anda menggunakan PDF yang dipindai, teks tidak dapat dipilih, melainkan sebuah kotak akan muncul. Anda dapat menggunakan fakta ini untuk membuat skrip. Saya tahu di C ++ QT ada cara, tidak yakin di Linux sekalipun.
Mencari kata dalam file: Dalam PDF yang tidak dipindai, pencarian Anda akan berfungsi, namun tidak dalam file yang dipindai. Anda hanya perlu menemukan beberapa kata yang umum untuk semua PDF atau saya lebih suka mengatakan mencari huruf 'e' di semua PDF. Ini memiliki distribusi frekuensi tertinggi sehingga kemungkinan Anda akan menemukannya di semua dokumen yang memiliki teks (Kecuali itu gadsby )
misalnya
Gunakan salah satu alat pemrosesan teks
sumber