كيفية استخراج الكلمات من ملفات PDF مع بيثون

تحليل كل النص

كما ذكرت في مقالتي السابقة: كيفية الاتصال بأوراق Google باستخدام Python ، كنت أعمل مع عميل لمساعدتهم على تحليل مئات ملفات PDF لاستخراج الكلمات الرئيسية لجعلها قابلة للبحث.

جزء من حل المشكلة هو معرفة كيفية استخراج البيانات النصية من جميع ملفات PDF هذه. قد تفاجأ عندما تعلم أنه ليس بهذه البساطة. كما ترون ، ملفات PDF هي تنسيق خاص بواسطة Adobe يأتي مع المراوغات الصغيرة الخاصة بهم عندما يتعلق الأمر بأتمتة عملية استخراج المعلومات من كل ملف.

لحسن الحظ ، لدينا اللغة المناسبة لهذا المنصب: بيثون. الآن ، لقد أوضحت حبي لبيثون: إنه سهل القراءة للإنسان ، ويحتوي على الكثير من المكتبات الرائعة التي تتيح لك القيام بأي شيء بشكل أساسي. إنها الأداة المثالية في حزام المرافق. كما ذكرت من قبل ، فإنه يجعلك باتمان.

فيما يلي برنامج تعليمي حول كيفية تحليل ملف PDF وتحويله إلى قائمة من الكلمات الرئيسية:

اقامة:

بالنسبة لهذا البرنامج التعليمي ، سأستخدم Python 3.6.3 ، يمكنك استخدام أي إصدار تريده (طالما أنه يدعم المكتبات ذات الصلة).

ستحتاج إلى مكتبات python التالية لمتابعة هذا البرنامج التعليمي:

  • PyPDF2 (لتحويل ملفات PDF البسيطة القائمة على النصوص إلى نص يمكن قراءته بواسطة Python)
  • textract (لتحويل ملفات PDF غير التافهة ، الممسوحة ضوئيًا إلى نص يمكن قراءته بواسطة Python)
  • nltk (لتنظيف وتحويل العبارات إلى كلمات رئيسية)

يمكن تثبيت كل من هذه المكتبات باستخدام الأوامر التالية في محطة طرفية جانبية (على نظام التشغيل MacOS):

نقطة تثبيت PyPDF2
نقطة تثبيت textract
نقطة تثبيت nltk

سيؤدي هذا إلى تنزيل المكتبات التي تحتاج إليها t0 parsePDF documents واستخراج الكلمات الأساسية. للقيام بذلك ، تأكد من تخزين ملف PDF الخاص بك داخل المجلد الذي تكتب فيه النص البرمجي.

قم ببدء تشغيل محررك المفضل واكتب:

ملاحظة: جميع الأسطر التي تبدأ بـ # هي تعليقات.

الخطوة 1: استيراد جميع المكتبات:

استيراد PyPDF2
استيراد textract
من nltk.tokenize استيراد word_tokenize
من nltk.corpus استيراد كلمات التوقف

الخطوة 2: قراءة ملف PDF

#write حلقة مفتوحة لفتح العديد من الملفات - اترك تعليقًا إذا كنت ترغب في معرفة كيفية ذلك
اسم الملف = "أدخل اسم الملف هنا"
#open يتيح لك قراءة الملف
pdfFileObj = open (اسم الملف ، 'rb')
المتغير pdfReader هو كائن قابل للقراءة وسيتم تحليله
pdfReader = PyPDF2.PdfFileReader (pdfFileObj)
# تحديد عدد الصفحات سيتيح لنا تحليل جميع صفحات #the
num_pages = pdfReader.numPages
العد = 0
النص = ""
# في حين حلقة سوف تقرأ كل صفحة
أثناء العد 
# هذا في حالة وجود بيان للتحقق مما إذا كانت المكتبة أعلاه قد أعادت #words. يتم ذلك لأن PyPDF2 لا يمكنه قراءة الملفات الممسوحة ضوئيًا.
إذا كان النص! = "":
   النص = النص
# إذا تم إرجاع العائدات أعلاه على أنها False ، فنحن نقوم بتشغيل textracter في مكتبة OCR إلى # تحويل ملفات PDF الممسوحة ضوئيًا / إلى صورة إلى نص
آخر:
   text = textract.process (fileurl، method = 'tesseract'، language = 'eng')
# الآن لدينا متغير نص يحتوي على كل النص المشتق من ملف PDF الخاص بنا. اكتب print (text) لترى ما تحتويه. يحتوي على #Likely الكثير من المساحات ، وربما غير المرغوب فيه مثل '\ n' الخ
# الآن ، سنقوم بتنظيف متغير النص ، وسنعيده كقائمة من الكلمات الرئيسية.

الخطوة 3: تحويل النص إلى كلمات رئيسية

# الكلمة word_tokenize () ستقسم العبارات النصية إلى كلمات فردية
الرموز المميزة = word_tokenize (النص)
# سننشئ قائمة جديدة تحتوي على علامات ترقيم نرغب في تنظيفها
علامات الترقيم = ['('، ')'، '؛'، ':'، '['، ']'، '،']
# نحن نهيئ متغير كلمات التوقف وهو عبارة عن قائمة كلمات مثل # "The" و "I" و "و" ، وما إلى ذلك ، والتي لا تحمل قيمة كبيرة ككلمات رئيسية
stop_words = stopwords.words ('الانجليزية')
# نقوم بإنشاء قائمة فهم لا تُرجع إلا قائمة بالكلمات # التي ليست في علامات التوقف وليس في علامات الترقيم.
الكلمات الأساسية = [كلمة لكلمة في الرموز إن لم تكن كلمة في stop_words وليس كلمة في علامات الترقيم]

الآن لديك كلمات رئيسية لملفك مخزنة كقائمة. يمكنك أن تفعل ما تريد مع ذلك. قم بتخزينه في جدول بيانات إذا كنت تريد جعل PDF قابلاً للبحث ، أو تحليل الكثير من الملفات وإجراء تحليل الكتلة. يمكنك أيضًا استخدامه لإنشاء نظام موصى به لاستئناف الوظائف ؛)

آمل أن تكونوا قد وجدت هذا البرنامج التعليمي قيمة! إذا كان لديك أي طلبات ، أو ترغب في الحصول على بعض التوضيحات ، أو العثور على خطأ ، يرجى إعلامي!

رضوان هو تقني ومؤسس مشارك لشركة Autonomous Tech ، وهي وكالة خدمات التصميم والتسويق والتكنولوجيا في فانكوفر ، كولومبيا البريطانية.