"ExtracText: استخراج البيانات من السير الذاتية بواسطة الذكاء الاصطناعي"


"ExtracText هو نظام يعتمد على تقنيات الذكاء الاصطناعي لاستخراج المعلومات الهامة من السير الذاتية بشكل آلي. باستخدام تقنيات تعلم الآلة وتحليل النصوص، يقوم ExtracText بتحديد الأسماء وعناوين البريد الإلكتروني وأرقام الهواتف من السير الذاتية المُرفقة، مما يسهل على المستخدمين معالجة البيانات بشكل أكثر فعالية."


تم تنفيذ هذا الكود باستخدام بيئة تطويرية مجانية تسمى جوجل (colab) والتي توفر القدرة على تشغيل النماذج والتعلم الآلي في السحابة بدون الحاجة إلى موارد كمبيوتر محلية قوية. يستفيد المشروع من مكتبة Hugging Face، وهي منصة شهيرة توفر مجموعة واسعة من النماذج المدربة مسبقًا في مختلف المجالات، مما يسهل عملية تطوير وتنفيذ نماذج الذكاء الاصطناعي بسرعة وكفاءة.

الخطوات :

# تثبيت المكتبات المطلوبة
!pip install gradio
!pip install transformers

تثبيت مكتبات gradio و transformers، وهما ضروريتان لبناء الواجهة واستخدام النماذج المدربة مسبقاً من مكتبة transformers الخاصة بـ Hugging Face.

import gradio as gr
from transformers import pipeline

استيراد دالة pipeline من مكتبة transformers، والتي تُستخدم لتحميل النماذج المدربة مسبقاً

ner = pipeline("ner", grouped_entities=True)


استخدام دالة pipeline لتحميل نموذج مُدرَّب مسبقاً للتعرف على الكيانات المسماة (ا(NER لمعامل "ner" يُحدد أننا نريد استخدام نمط NER، والمعامل grouped_entities=True يجمع الكيانات المتشابهة معاً (مثلاً، إذا كان الاسم يمتد عبر عدة كلمات، يتم جمعها ككيان واحد).

Import re

استيراد وحدة re التي توفر الدعم للتعبيرات النمطية في بايثون.

pattern = re.compile(r'\(?\b[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}\b')

تعريف أنماط التعبيرات النمطية للتعرف على عناوين البريد الإلكتروني وأرقام الهواتف داخل النص.

 

email_pattern يبحث عن هياكل عناوين البريد الإلكتروني النموذجية.

 

phone_pattern يبحث عن أرقام الهواتف بأشكال مثل (555) 123-4567، 555-123-4567، و 555 123 4567.

def extract_info(text):
    results = ner(text)
    extracted_info = {"name": [], "email": [], "phone": []}
    
    # استخراج الأسماء باستخدام NER
    for entity in results:
        if entity['entity_group'] == 'PER':
            extracted_info['name'].append(entity['word'])

    # استخراج البريد الإلكتروني باستخدام التعبير النمطي
    emails = email_pattern.findall(text)
    extracted_info['email'] = emails

    # استخراج أرقام الهواتف باستخدام التعبير النمطي
    phones = phone_pattern.findall(text)
    extracted_info['phone'] = phones

    return extracted_info

تعريف دالة extract_info التي تأخذ نصاً كمدخل وتستخرج الأسماء، وعناوين البريد الإلكتروني، وأرقام الهواتف.

results = ner(text) تطبيق نموذج NER على النص المدخل، والذي يعيد قائمة من الكيانات.

extracted_info = {"name": [], "email": [], "phone": []}تهيئة قاموس لتخزين الأسماء، والبريد الإلكتروني، وأرقام الهواتف المستخرجة.

الحلقة for تمر عبر الكيانات التي أعادها نموذج NER:

إذا كانت مجموعة الكيان 'PER' (تشير إلى شخص)، يتم إضافة كلمة الكيان إلى قائمة name.

emails = email_pattern.findall(text) استخدام النمط النمطي للعثور على جميع عناوين البريد الإلكتروني في النص وتخزينها في قائمة email.

phones = phone_pattern.findall(text) استخدام النمط النمطي للعثور على جميع أرقام الهواتف في النص وتخزينها في قائمة phone.

return extracted_info إعادة القاموس الذي يحتوي على المعلومات المستخرجة.


iface = gr.Interface(fn=extract_info, inputs="text", outputs="json")
iface.launch()

إنشاء واجهة Gradio باستخدام دالة extract_info.

fn=extract_info يحدد الدالة التي يتم استدعاؤها عندما يقوم المستخدم بإدخال نص.

inputs="text" يحدد أن المدخل للدالة هو نص.

outputs="json" يحدد أن مخرج الدالة سيكون بصيغة JSON.

 مما يجعلها متاحة للمستخدم iface.launch()تشغيل واجهة Gradio