Apidog

منصة تطوير API تعاونية متكاملة

تصميم API

توثيق API

تصحيح أخطاء API

محاكاة API

اختبار API الآلي

كيف أستخدم جيمني 2.0 فلاش لتحويل النص في ملفات PDF الكبيرة

@apidog

@apidog

Updated on مارس 1, 2025

💡
قبل أن نبدأ، دعني أوجهك بسرعة: قم بتنزيل Apidog مجانًا اليوم لتبسيط عملية اختبار واجهات برمجة التطبيقات الخاصة بك، خاصةً لاستكشاف ميزات Claude 3.7 Sonnet القوية - مثالية للمطورين الذين يتطلعون لاختبار نماذج الذكاء الاصطناعي المتطورة مثل هذه!
زر

في رحلتي كعالم بيانات أعمل مع ذكاء الوثائق، غالبًا ما واجهت مهمة صعبة تتمثل في استخراج ومعالجة النص من ملفات PDF الكبيرة والمعقدة. غالبًا ما تتضمن عمليات التعرف الضوئي على الحروف (OCR) التقليدية عدة خطوات، وأدوات متخصصة، ووقت معالجة كبير. ومع ذلك، فإن إدخال Gemini 2.0 Flash قد غيّر طريقتي في التعامل مع هذه الوثائق. في هذه المقالة، سأشارك سير عملي الشخصي لاستخدام Gemini 2.0 Flash كحل OCR قوي لملفات PDF الكبيرة دون اللجوء إلى هياكل RAG (التوليد المعزز بالاسترجاع) المعقدة.

مقدمتي إلى Gemini 2.0 Flash

كان لقائي الأول مع Gemini 2.0 Flash بعد أن واجهت صعوبة مع مشروع صعب يتضمن مئات التقارير المالية القديمة بصيغة PDF الممسوحة ضوئيًا. كانت أدوات OCR التقليدية إما تفشل في التقاط الجداول بشكل صحيح أو تتطلب معالجة مكثفة بعد ذلك. عندما أصدرت Google Gemini 2.0 Flash بإطار سياقي مثير للإعجاب يبلغ مليوني توكن وقدرات متعددة الوسائط، أدركت على الفور إمكاناته.

Gemini 2.0 Flash ليس مجرد نموذج لغوي آخر—إنه قوة متعددة الوسائط قادرة على فهم كل من النص والمحتوى البصري داخل الوثائق. وهذا يجعله مناسبًا بشكل فريد لمهام OCR حيث تهم السياق والفهم البصري. بفضل قدرته على معالجة ما يصل إلى حوالي 1500 صفحة في عملية واحدة، أصبح حلي المفضل لـ OCR الوثائق الكبيرة.

إعداد بيئة OCR الخاصة بي

قبل الدخول في سير عملي لـ OCR، كنت بحاجة إلى إنشاء قاعدة تقنية موثوقة. إليك كيف أعددت بيئتي:

  1. تثبيت المكتبات الأساسية: أولاً، قمت بتثبيت الحزم اللازمة من Python للتفاعل مع Gemini والتعامل مع ملفات PDF:
pip install google-generativeai
pip install pypdf
pip install pdf2image
pip install pillow
pip install python-dotenv
  1. تهيئة الوصول إلى واجهة برمجة التطبيقات: أنشأت مشروعًا في Google Cloud Console، وفعلت واجهة برمجة التطبيقات الخاصة بـ Gemini، وأنشأت مفتاح API. أحتفظ بهذا المفتاح بشكل آمن باستخدام متغيرات البيئة:
import os
import google.generativeai as genai
from dotenv import load_dotenv

# تحميل مفتاح API من ملف .env
load_dotenv()
api_key = os.getenv('GOOGLE_API_KEY')

# تهيئة واجهة برمجة التطبيقات لـ Gemini
genai.configure(api_key=api_key)
  1. تهيئة النموذج: أقوم بالوصول إلى Gemini 2.0 Flash والذي يدعم المدخلات المتعددة الوسائط:
# تهيئة Gemini 2.0 Flash
model = genai.GenerativeModel('gemini-2.0-flash')

سير عمل تحويل PDF واستخراج الصور الخاص بي

لتحقيق OCR فعال مع Gemini 2.0 Flash، طورت نهجًا منهجيًا للتعامل مع ملفات PDF:

  1. التحويل إلى صور: أولاً، أقوم بتحويل صفحات PDF إلى صور عالية الدقة:
from pdf2image import convert_from_path
import os

def convert_pdf_to_images(pdf_path, output_folder, dpi=300):
    # إنشاء دليل الإخراج إذا لم يكن موجودًا
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # تحويل صفحات PDF إلى صور
    images = convert_from_path(pdf_path, dpi=dpi)
    
    # حفظ الصور في مجلد الإخراج
    image_paths = []
    for i, image in enumerate(images):
        image_path = os.path.join(output_folder, f'page_{i+1}.jpg')
        image.save(image_path, 'JPEG')
        image_paths.append(image_path)
    
    return image_paths
  1. المعالجة دفعة لملفات PDF الكبيرة: بالنسبة للمستندات الكبيرة بشكل خاص، أقوم بمعالجة الصور في دفعات:
def batch_images(image_paths, batch_size=50):
    """تجميع الصور في دفعات للمعالجة"""
    for i in range(0, len(image_paths), batch_size):
        yield image_paths[i:i + batch_size]

خط أنابيب OCR الخاص بي باستخدام Gemini 2.0 Flash

إليك المكان الذي تتألق فيه قوة Gemini 2.0 Flash حقًا في سير عملي:

  1. التحويل المباشر من صورة إلى نص: أعمل على معالجة الصور مباشرة من خلال القدرات المتعددة الوسائط:
from PIL import Image
from IPython.display import display
import base64
import io

def ocr_with_gemini(image_paths, instruction):
    """معالجة الصور باستخدام Gemini 2.0 Flash لـ OCR"""
    images = [Image.open(path) for path in image_paths]
    
    prompt = f"""
    {instruction}
    
    هذه صفحات من مستند PDF. استخرج جميع المحتوى النصي مع الحفاظ على الهيكل.
    انتبه بشكل خاص للجداول، والأعمدة، والعناوين، وأي محتوى منظم.
    احتفظ بفواصل الفقرات والتنسيق.
    """
    
    response = model.generate_content([prompt, *images])
    return response.text
  1. نهجي في التعامل مع عناصر الوثيقة المعقدة:

بالنسبة للمستندات ذات التخطيطات المعقدة التي تتضمن جداول، ومخططات، ونصوص متعددة الأعمدة، استخدم تعليمات محددة:

def ocr_complex_document(image_paths):
    instruction = """
    استخرج كل نص محتوى من صفحات هذا المستند.
    بالنسبة للجداول:
    1. احتفظ بهيكل الجدول باستخدام تنسيق جدول Markdown
    2. حافظ على جميع عناوين الأعمدة وتسميات الصفوف
    3. تأكد من التقاط البيانات الرقمية بدقة
    
    بالنسبة للتخطيطات متعددة الأعمدة:
    1. عالج الأعمدة من اليسار إلى اليمين
    2. افصل المحتوى بشكل واضح بين الأعمدة المختلفة
    
    بالنسبة للمخططات والرسم البياني:
    1. وصف نوع المخطط
    2. استخراج أي تسميات محورية مرئية، أو أساطير، أو نقاط بيانات
    3. استخراج أي عنوان أو تعليق
    
    احفظ جميع العناوين، والتذييلات، وأرقام الصفحات، والهوامش.
    """
    
    return ocr_with_gemini(image_paths, instruction)
  1. OCR المتخصص لحسابات المستندات المالية:

العديد من ملفات PDF التي أعمل عليها تحتوي على بيانات مالية، مما يتطلب اهتمامًا خاصًا:

def ocr_financial_document(image_paths):
    instruction = """
    استخرج كل نص محتوى من صفحات هذه الوثائق المالية.
    
    انتبه بشكل خاص إلى:
    1. جميع القيم الرقمية وتأكد من أنها مكتوبة بدقة
    2. رموز العملات وعلاقتها الصحيحة بالأرقام
    3. الجداول المالية - احتفظ بهيكلها الدقيق والمحاذاة
    4. الميزانيات، وبيانات الدخل، وبيانات التدفق النقدي
    5. الهوامش والكشوف - غالبًا ما تحتوي على معلومات حاسمة
    6. أي تواريخ مرتبطة بالفترات المالية
    
    شكل الجداول باستخدام بناء جملة جدول Markdown للحفاظ على هيكلها.
    """
    
    return ocr_with_gemini(image_paths, instruction)

عملية ضمان الجودة الخاصة بي

وجدت أن جودة OCR يمكن أن تختلف بناءً على خصائص الوثيقة، لذا أنفذ عملية فحص الجودة:

def verify_ocr_quality(image_path, extracted_text):
    """تحقق من جودة نتائج OCR لصفحة معينة"""
    image = Image.open(image_path)
    
    prompt = f"""
    لدي صفحة وثيقة ونص تم استخراجه منها باستخدام OCR.
    
    قارن الصورة الأصلية بالنص المستخرج وحدد أي أخطاء أو نواقص.
    ركز على:
    1. النص المفقود
    2. الأحرف التي تم التعرف عليها بشكل غير صحيح
    3. مشاكل هيكلة الجدول
    4. مشاكل مع الأحرف أو الرموز الخاصة
    
    النص المستخرج:
    {extracted_text}
    """
    
    response = model.generate_content([prompt, image])
    return response.text

أستخدم هذه الوظيفة لمراجعة صفحات عشوائية من المستندات الكبيرة لضمان الجودة.

عملي للتعامل مع المستندات الكبيرة التي تتجاوز حدود السياق

بينما يمتلك Gemini 2.0 Flash حدًا مثيرًا للإعجاب يصل إلى 1 مليون توكن، لا تزال بعض مستنداتي تتجاوز هذه السعة. بالنسبة لهذه الحالات، طورت منهجية معالجة متسلسلة:

  1. معالجة PDF فيSegments ذات معنى:
def process_large_pdf(pdf_path, output_folder, output_file):
    # تحويل PDF إلى صور
    image_paths = convert_pdf_to_images(pdf_path, output_folder)
    
    # إنشاء دفعات من الصور (مثلًا، حسب الفصل أو القسم)
    batches = batch_images(image_paths, 30)  # اضبط حجم الدفعة بناءً على تعقيد الوثيقة
    
    full_text = ""
    for i, batch in enumerate(batches):
        print(f"معالجة الدفعة {i+1}...")
        batch_text = ocr_with_gemini(batch, "استخرج كل النص مع الحفاظ على هيكل الوثيقة")
        full_text += f"\n\n--- الدفعة {i+1} ---\n\n{batch_text}"
    
    # حفظ النص المستخرج الكامل
    with open(output_file, 'w', encoding='utf-8') as f:
        f.write(full_text)
    
    return full_text
  1. المعالجة اللاحقة لـتناسق الوثيقة:

بعد استخراج النص من جميع الدفعات، أستخدم Gemini 2.0 Flash لضمان التناسق:

def harmonize_document(extracted_text):
    prompt = """
    تم استخراج النص التالي من وثيقة PDF كبيرة في دفعات.
    قم بتوحيد المحتوى عن طريق:
    1. إزالة أي علامات الفصل بين دفعات
    2. ضمان تنسيق متناسق طوال الوقت
    3. إصلاح أي مشاكل هيكلية للجدول عند حدود الدفعة
    4. ضمان سلاسة الفقرات والأقسام عبر حدود الدفعة
    
    نص مستخرج أصلي:
    """
    
    response = model.generate_content(prompt + extracted_text)
    return response.text

حالة استخدام خاصة: منهجي في OCR الوثائق التاريخية

بعض مشاريع OCR الأكثر تحديًا تتضمن مستندات تاريخية بها أوراق قديمة، نصوص باهتة، أو خطوط غير عادية. بالنسبة لهذه، طورت نهجًا متخصصًا:

def historical_document_ocr(image_paths):
    instruction = """
    استخرج النص من صور هذه الوثائق التاريخية.
    
    اعتبر التحديات التالية:
    1. ورق قديم مع بقع أو تغير لون
    2. حبر باهت أو خطوط مطبوعة
    3. الطباعة القديمة والتشابك
    4. تعليقات مكتوبة باليد
    5. تخطيطات الصفحات غير القياسية
    
    أعط الأولوية للدقة على حساب الحفاظ على التنسيق عند الضرورة.
    لاحظ أي نص يبدو غير واضح بعلامة [?].
    """
    
    extracted_text = ocr_with_gemini(image_paths, instruction)
    
    # تصحيح بناءً على السياق
    correction_prompt = f"""
    تم استخراج النص التالي من وثيقة تاريخية قد تواجه مشاكل جودة.
    راجع النص بحثًا عن الأخطاء النموذجية في OCR للوثائق التاريخية:
    1. اصلاح الكلمات التي قد تم تفسيرها بشكل خاطئ بسبب الورق القديم أو الحبر الباهت
    2. تصحيح الأخطاء الإملائية القديمة فقط إذا بدا أنها أخطاء OCR (ليس إذا كانت صحيحة وفقًا لفترة معينة)
    3. حل أي نص غير مؤكد تم تمييزه بعلامة [?] إذا كانت السياق يوضح أنه القراءة الصحيحة
    
    النص الأصلي:
    {extracted_text}
    """
    
    corrected_text = model.generate_content(correction_prompt)
    return corrected_text.text

نتائج عملية من مشاريعي في OCR

في تجربتي لاستخدام Gemini 2.0 Flash لـ OCR عبر عشرات الوثائق الكبيرة، شهدت تحسينات ملحوظة مقارنة بأساليب OCR التقليدية:

  1. تحسينات في الدقة: بالنسبة للتقارير المالية المعقدة التي تحتوي على جداول ومخططات، تحسنت معدلات دقتي من حوالي 85% مع OCR التقليدي إلى أكثر من 95% مع Gemini 2.0 Flash. تساعد قدرة النموذج على فهم السياق في تفسير الرموز الغامضة بشكل صحيح بناءً على المحتوى المحيط.
  2. تقليل وقت المعالجة: ما كان يستغرق مني عدة ساعات من المعالجة والتصحيح اليدوي، الآن يكتمل غالبًا في دقائق. من خلال القضاء على الحاجة إلى خطوات منفصلة لعملية OCR وفهم النص، أصبح سير عملي أكثر كفاءة بشكل ملحوظ.
  3. الحفاظ على هيكل الجدول: واحدة من أكثر القدرات إثارة للإعجاب التي رأيتها هي قدرة Gemini 2.0 Flash على الحفاظ على الهياكل الجدولية المعقدة. في الوثائق المالية، كانت هذه ميزة لا تقدر بثمن لضمان سلامة البيانات.

الخاتمة: التأثير على سير عملي في معالجة الوثائق

لقد حول اعتماد Gemini 2.0 Flash لـ OCR لملفات PDF الكبيرة سير عملي في معالجة الوثائق. أدى القضاء على هياكل RAG المعقدة لمعظم حالات الاستخدام إلى تبسيط بنيتي التقنية مع تحسين النتائج. تتيح قدرة النموذج على معالجة العناصر البصرية والنصوص في الوثائق في وقت واحد استخراج نص ذكي أكثر.

ما يثير إعجابي في المقام الأول هو قدرة النموذج على التعامل مع الحالات القصوى التي تواجه أنظمة OCR التقليدية صعوبة فيها - التعليقات المكتوبة باليد، وعلامات المياه، والخطوط غير العادية، والتخطيطات المعقدة. من خلال الاستفادة من نافذة السياق الكبيرة لـ Gemini 2.0 Flash، يمكنني معالجة أجزاء كبيرة من الوثائق في عملية واحدة، والحفاظ على التناسق والفهم السياقي طوال الوقت.

بالنسبة لعلماء البيانات، والباحثين، والمهنيين الذين يعملون بانتظام مع مجموعات وثائق كبيرة، يمثل Gemini 2.0 Flash ليس مجرد تحسين تدريجي ولكن تحولًا أساسيًا في كيفية تعاملنا مع OCR وفهم الوثائق. إن القدرة على "رؤية" و"قراءة" الوثائق بالطريقة التي يفعلها الإنسان - باحتساب التخطيط والسياق والعناصر البصرية بشكل كلي - يفتح إمكانيات جديدة لتطبيقات ذكاء الوثائق.

بينما أواصل تحسين سير عملي، أكتشف باستمرار طرقًا جديدة يمكن لهذه التقنية من خلالها تبسيط مهام معالجة الوثائق التي كانت سابقًا تتطلب جهدًا كبيرًا أو تحديات تقنية. مستقبل OCR الوثائق هنا، ويحدث ثورة في كيفية عملي مع أرشيفات PDF الضخمة التي كانت في السابق عائقًا كبيرًا في حياتي المهنية.

زر