مقدمة
بشكل عام، ليس من الضروري أن تكون البيانات التي نستخدمها متاحة بتنسيق CSV أو JSON. يمكن تخزين البيانات على شكل جدول في ملف PDF. كحالة أكثر وضوحًا، يمكننا نسخ الجدول ولصقه في جدول بيانات أو محرر نصوص. ولكن قد يكون من الممكن أيضًا أن يكون لدينا أكثر من جدول واحد في نفس ملف PDF له هياكل مماثلة. في مثل هذه الحالات، يتعين علينا نسخ ولصق كل جدول من هذه الجداول على حدة، مما يجعل العمل شاقًا.
ومع ذلك، لقطع هذا العمل الكئيب، توفر بايثون مكتبة مفتوحة المصدر، تُعرف أيضًا باسم table-py ، والذي يسمح للمستخدمين باستخراج أكثر من جدول بشكل واضح. في الدرس التالي سنتعرف على الطبلة ووظائفها.
ما هو الطبلة؟
Tabular عبارة عن غلاف أساسي لـ tabula-java يسمح للمستخدمين باستخراج الجدول وتحويل ملف PDF مباشرة إلى إطارات بيانات أو JSON باستخدام لغة البرمجة بايثون . يمكن للمستخدم أيضًا استخراج الجداول من PDF وتحويلها إلى ملفات بتنسيق TSV أو CSV أو JSON.
Tabula هي أداة تعتمد على تطبيق واجهة المستخدم الرسومية (GUI)؛ لكن، table-java هي أداة تعتمد على واجهة مستخدم سطر الأوامر (CUI). يوفر tabula-java روابط Ruby و R و NodeJS ولكن ليس لـ Python. وهكذا، قدم المطورون مفهوم table-py الذي يوفر ربط بايثون.
الآن دعونا نفهم من يستخدم Tabula وكيف يمكننا تثبيته.
من يستخدم الطبلة؟
Tabula هي أداة قوية تستخدمها المؤسسات الإخبارية بجميع أحجامها من أجل تعزيز التقارير الاستقصائية. هؤلاء المنظمات الإخبارية هي تايمز أوف لندن، بروبوبليكا، فورين بوليسي، نيويورك تايمز، لا ناسيون (الأرجنتين)، وسانت بول (مينيسوتا) بايونير برس.
هناك منظمات شعبية مثل SchoolCuts.org التي تعتمد أيضًا على Tabula لتحويل المستندات القديمة إلى موارد عامة صديقة للإنسان.
بصرف النظر عما سبق، هناك باحثون من خلفيات أخرى يستخدمون Tabula لتحويل تقارير PDF الخاصة بهم إلى ملفات بتنسيق Excel Spreadsheets وCSVs وJSON ويستخدمونها لغرض التحليل وتطبيقات قواعد البيانات.
تنفيذ Tabula في بايثون
بعد أن ناقشنا القليل من Tabula، دعونا نفهم كيفية تنفيذه في بايثون.
تركيب المكتبة
منذ table-py هي مكتبة مفتوحة المصدر من لغة بايثون، وسوف نستخدم نقطة المثبت لتثبيت المكتبة.
مقارنة بالسلسلة
$ pip install tabula-py
استيراد المكتبة
بمجرد اكتمال التثبيت، يمكننا التحقق من ذلك ببساطة عن طريق استيراد المكتبة كما هو موضح أدناه:
import tabula
في حالة إرجاع البرنامج خطأ في الاستيراد يوصى بإعادة تثبيت الحزمة.
ال table-py توفر المكتبة وظائف مختلفة مثل قراءة ملف PDF، أو قراءة جدول في صفحة معينة من ملف PDF، أو قراءة جداول متعددة في نفس الصفحة من ملف PDF، أو تحويل ملفات PDF مباشرة إلى ملف CSV.
لنبدأ بقراءة ملف PDF
قراءة ملف PDF
ال table-py تتيح المكتبة لمستخدميها قراءة ملف PDF باستخدام الوظيفة المعروفة باسم read_pdf() وظيفة.
بناء الجملة:
obj = tabula.read_pdf(filename, args[])
حدود:
اسم الملف: ال اسم الملف المعلمة هي اسم ملف pdf؛ نود أن نقرأ البيانات من.
دعونا نحول جدول بيانات pdf التالي إلى إطار بيانات الباندا.
اسم الملف: marksheet_table.py
صفحة 1
اسم | إنجليزي | الفيزياء | كيمياء | مادة الاحياء | المجموع |
---|---|---|---|---|---|
أ | 86 | 54 | 65 | 83 | 288 |
ب | 56 | أربعة خمسة | 80 | 55 | 236 |
ج | 3. 4 | 66 | 73 | 90 | 263 |
د | 77 | 75 | 46 | 3. 4 | 232 |
و | 74 | 82 | 55 | 77 | 288 |
F | 69 | 76 | 82 | 46 | 273 |
ز | 53 | 33 | 29 | أربعة خمسة | 160 |
ح | 70 | 41 | 67 | 23 | 201 |
أنا | 80 | 43 | 88 | 28 | 239 |
ج | 90 | 37 | أربعة خمسة | 71 | 243 |
ك | 98 | 55 | 88 | 81 | 322 |
ل | 90 | 54 | 67 | 37 | 248 |
م | 87 | 76 | 88 | 54 | 305 |
ن | 86 | 69 | 82 | 66 | 303 |
يا | 67 | 74 | 54 | 65 | 260 |
ص | 75 | 96 | 53 | 67 | 291 |
س | أربعة خمسة | 87 | 80 | أربعة خمسة | 257 |
ر | 44 | 66 | 49 | 78 | 237 |
س | 78 | 39 | 78 | 80 | 275 |
ت | 56 | 54 | 76 | 86 | 273 |
في | 43 | 90 | 64 | 77 | 274 |
في | 95 | 88 | 66 | 55 | 304 |
في | 64 | 67 | 86 | 80 | 297 |
X | 82 | 56 | أربعة خمسة | 65 | 248 |
و | 79 | 65 | 70 | 54 | 268 |
مع | 83 | 54 | 40 | 75 | 252 |
فيما يلي مثال موضح أدناه يوضح كيفية استخراج البيانات من ملف pdf.
مثال:
# importing the library import tabula # address of the file myfile = 'marksheet_table.pdf' # using the read_pdf() function mytable = tabula.read_pdf(myfile, pages = 1) # printing the table print(mytable[0])
انتاج:
Name English Physics Chemistry Biology Total 0 A 86 54 65 83 288 1 B 56 45 80 55 236 2 C 34 66 73 90 263 3 D 77 75 46 34 232 4 E 74 82 55 77 288 5 F 69 76 82 46 273 6 G 53 33 29 45 160 7 H 70 41 67 23 201 8 I 80 43 88 28 239 9 J 90 37 45 71 243 10 K 98 55 88 81 322 11 L 90 54 67 37 248 12 M 87 76 88 54 305 13 N 86 69 82 66 303 14 O 67 74 54 65 260 15 P 75 96 53 67 291 16 Q 45 87 80 45 257 17 R 44 66 49 78 237 18 S 78 39 78 80 275 19 T 56 54 77 86 273 20 U 43 90 64 77 274 21 V 95 88 66 55 304 22 W 64 67 86 80 297 23 X 82 56 45 65 248 24 Y 79 65 70 54 268 25 Z 83 54 40 75 252
توضيح:
في المثال أعلاه، قمنا باستيراد المكتبة المطلوبة وحددنا متغيرًا يقوم بتخزين عنوان ملف بيانات pdf. لقد استخدمنا بعد ذلك read_pdf() وظيفة قراءة البيانات من ملف pdf وطباعتها للمستخدمين. ونتيجة لذلك، تمت قراءة جدول البيانات بنجاح.
ملاحظة: لقد استخدمنا الصفحات المعلمة في الدالة read_pdf() لقراءة البيانات من الصفحة (الصفحات) المحددة.
دعونا نفكر في مثال آخر لطباعة الجداول من صفحة معينة، على سبيل المثال الصفحة رقم 2.
مثال:
# importing the library import tabula # address of the file myfile = 'marksheet_table.pdf' # using the read_pdf() function mytable = tabula.read_pdf(myfile, pages = 2) # printing the table print(mytable[0])
انتاج:
Name Final Scores 0 A 288 1 B 236 2 C 263 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 16 Q 257 17 R 237 18 S 275 19 T 273 20 U 274 21 V 304 22 W 297 23 X 248 24 Y 268 25 Z 252
توضيح:
في المثال أعلاه، اتبعنا نفس الإجراء كما فعلنا سابقًا. ومع ذلك، فقد قمنا بتعيين الصفحات المعلمة إلى 2 وطباعة الجدول الأول من الصفحة المحددة. ونتيجة لذلك، تمت طباعة جدول الفهرس الصفري الموجود في الصفحة 2 بنجاح.
الآن، دعونا نفهم ما يحدث عندما يكون هناك أكثر من جدول في نفس الصفحة من ملف بيانات PDF.
هندسة الخلية
التعامل مع جداول متعددة في نفس الصفحة من ملف PDF
يمكننا التعامل مع أكثر من جدول في نفس الوقت باستخدام معلمة إضافية تعرف باسم multi_tables. ال multi_tables تأخذ المعلمة قيمة منطقية لها read_pdf() تقرأ الدالة جداول متعددة كجداول مستقلة إذا كانت صحيحة أو تقرأ جداول متعددة كجدول واحد إذا كانت خاطئة.
دعونا ننظر في المثال التالي الذي يوضح كيفية قراءة جداول متعددة كجداول مستقلة.
مثال:
# importing the library import tabula # address of the file myfile = 'marksheet_table.pdf' # using the read_pdf() function mytable = tabula.read_pdf(myfile, pages = 2, multiple_tables = True) # printing the table print(mytable[0]) print(mytable[1])
انتاج:
Name Final Scores 0 A 288 1 B 236 2 C 263 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 16 Q 257 17 R 237 18 S 275 19 T 273 20 U 274 21 V 304 22 W 297 23 X 248 24 Y 268 25 Z 252 Name Position 0 K I 1 M II 2 V III 3 N IV 4 W V
توضيح:
في المثال التالي، قمنا مرة أخرى باستيراد المكتبة المطلوبة وحددنا المتغير الذي يخزن عنوان ملف PDF. لقد استخدمنا بعد ذلك read_pdf() وظيفة وتضمنت multi_tables تعيين المعلمة عليه حقيقي . لقد قمنا بعد ذلك بطباعة الجداول المتعددة الموجودة في الصفحة 2 من ملف PDF بشكل منفصل.
الآن، دعونا نفكر في مثال لفهم كيفية قراءة جداول متعددة كجدول واحد.
مثال:
# importing the library import tabula # address of the file myfile = 'marksheet_table.pdf' # using the read_pdf() function mytable = tabula.read_pdf(myfile, pages = 2, multiple_tables = False) # printing the table print(mytable[0])
انتاج:
Name Final Scores 0 A 288 1 B 236 2 C 263 3 D 232 4 E 288 5 F 273 6 G 160 7 H 201 8 I 239 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 9 J 243 10 K 322 11 L 248 12 M 305 13 N 303 14 O 260 15 P 291 16 Q 257 17 R 237 18 S 275 19 T 273 20 U 274 21 V 304 22 W 297 23 X 248 24 Y 268 25 Z 252 26 Name Position 27 K I 28 M II 29 V III 30 N IV 31 W V
توضيح:
في المثال التالي، قمنا الآن بتعيين multi_tables المعلمة ل خطأ شنيع . ونتيجة لذلك، يتم التعامل مع الجداول الموجودة في الصفحة 2 كجدول واحد.
تحويل ملف PDF مباشرة إلى ملف CSV
يمكننا تحويل ملف PDF الذي يحتوي على بيانات جدولية مباشرةً إلى ملف CSV بمساعدة ملف تحويل_إلى() الطريقة في جدولة مكتبة.
بناء الجملة:
tabula.convert_into('filename.pdf', 'newfilename.csv', args[])
دعونا نفكر في المثال التالي الذي يوضح تحويل ملف PDF إلى ملف CSV.
مثال:
قائمة المصفوفات جافا
# importing the library import tabula # address of the file myfile = 'marksheettable.pdf' # using the read_pdf() function tabula.convert_into(myfile, 'marksheet.csv') print('The PDF file has been converted successfully.')
انتاج:
'pages' argument isn't specified.Will extract only from page 1 by default. The PDF file has been converted successfully.
توضيح:
في المثال أعلاه، قمنا مرة أخرى باستيراد المكتبة المطلوبة وحددنا المتغير الذي يحتوي على عنوان ملف PDF. لقد استخدمنا بعد ذلك تحويل_إلى() طريقة تحويل ملف PDF إلى ملف CSV وطباعة رسالة نجاح.
علاوة على ذلك، يمكننا أن نلاحظ أيضًا أن البرنامج أعاد بيانًا يفيد بأن 'الصفحات' لم يتم تحديد الوسيطة. وبالتالي، سيتم استخراج الجدول الموجود في الصفحة 1 بشكل افتراضي.