هل تتطلب ملفات PDF التعرف على الحروف (OCR)؟ استخدم PyMuPDF للفحص المسبق صفحة بصفحة، بدلا من إعادة تحديد النسخة كاملة
سواء كان ملف PDF يحتاج إلى OCR أم لا، لا حاجة لإعادة تعريف المستند بالكامل. استخدام PyMuPDF للتحقق من صفحة بصفحة ما إذا كان هناك طبقة نصية أو صورة كاملة للصفحة، مع إرسال الصفحات التي تحتاجها فعلا للتعرف. يشمل عينات قابلة للتشغيل، اختبارات صفحات متدوارة، وتفسيرات حدود التحويل.
تميل العديد من الفرق إلى تصنيف المستند بالكامل ك "مسح ضوئي" أو "قابل للنسخ" عند نقطة الإدخال عند التعامل مع ترجمة PDF أو أرشفته. قد يحتوي ملف PDF من 300 صفحة على طبقات نصية لأول 280 صفحة، مع مسح آخر 20 صفحة فقط كمرفقات. إذا تم تصنيفه حسب ملفات كاملة، فإن السجل الضوئي الكامل سيزيد من أوقات الانتظار وقد يخطئ في تحديد الأرقام الصحيحة أصلا. وعلى العكس، مجرد رؤية أن الصفحة الرئيسية يمكنها نسخ النص وجعل جميع الصفحات تتجاوز السجل الضوئي الضوئي (OCR) هو أيضا خطر.
نهج أكثر موثوقية هو ترك كل صفحة تحمل نتائج الفحص المسبق إلى الخطوة التالية. تطبق هذه الورقة تقسيم محافظ لثلاث قنوات: الاستخراج المباشر، والإرسال إلى قائمة المرشحين في OCR، والفحص اليدوي. إنه دليل هندسي قابل للتفسير، وليس مصنفا عالميا لتقييم جودة النص. بعد القراءة، ستحصل على برنامج تمهيد قابل للنشر صفحة بصفحة، مع حدود التحويل واستراتيجيات التعامل مع الأعطال الشائعة.
استنتاج جملة واحدة
ليست هناك حاجة للحكم على ما إذا كان ملف PDF يتطلب التعرف الضوئي على الحروف. استخدم PyMuPDF للتحقق مسبقًا من الصفحة تلو الأخرى وأرسل فقط الصفحات التي تحتاج حقًا إلى التعرف عليها إلى التعرف الضوئي على الحروف.
| حالتك | الممارسات الموصى بها | السبب |
|---|---|---|
| استخرج ما لا يقل عن 40 حرفًا بدون مسافات بيضاء من صفحة واحدة | الاستخراج المباشر (TEXT_CANDIDATE) | هناك بالفعل عدد كاف من الشخصيات، لكن طبقات OCR السيئة المخفية لا تزال بحاجة إلى مراجعة دقيقة |
| أقل من 40 كلمة وصورة واحدة تغطي 70% على الأقل من الصفحة | تم إرسالها إلى قائمة المرشحين لشهادة السجل الضئيل | المسح الكامل للصفحة مناسبة للتعرف، لكن الصور النقية تلبي المتطلبات أيضا |
| صفحة فارغة، أو نوع متجه، أو عنوان متناثر، أو لغز معقد | الفحص اليدوي (مراجعة) | لا يمكن تصنيف هذه الحالات بشكل موثوق إلى أول فئتين ولا يمكن تخطيها أو التخلص منها تلقائيا |
| وثيقة مختلطة من 300 صفحة | صفحة الاختبار المبدئي بصفحة، ولم تتم المعالجة | تجنب إجراء الرقابة الضوئية على جميع الصفحات بسبب مسح بعض المرفقات، أو تخطي جميع السجلات الضوئية لأن الصفحة الرئيسية تحتوي على نص |
ملاحظة: المحتوى الموجود في الصورة يأتي من ملف PDF المركب الذي تم إنشاؤه بواسطة الكود أدناه، وليس ملف العميل، ولا واجهة OmniDoc. النص الموجود على صفحة الصورة عبارة عن بكسلات نقطية؛ يحتوي النص الموجود على صفحة النص على طبقة نص حقيقية.
أولا، قرر ما الذي يجب التحقق منه
هنا، تستخدم إشارتان: عدد أحرف النص بعد إزالة الفراغ، ونسبة أكبر صورة على الصفحة إلى مساحة الصفحة. الأولى تجيب "هل تم استخراج عدد كاف من الحروف؟" الثانية تساعد في التمييز بين المسح الكامل للصفحات والصفحات الفارغة. تتقاطع منطقة الصورة أولا مع مربع القص لتجنب تجاوز مقياس تكبير الصورة على الصفحة.
| ملاحظة | تحويل هذه المادة | لا تزال بحاجة إلى الاهتمام |
|---|---|---|
| ما لا يقل عن 40 حرفًا بدون مسافات بيضاء | TEXT_CANDIDATE | يمكن أيضًا أن تحتوي طبقات التعرف الضوئي على الحروف السيئة المخفية على الكثير من الكلمات |
| أقل من 40 كلمة وصورة واحدة تغطي 70% على الأقل | OCR_CANDIDATE | الصور النقية ستفي أيضًا بالشروط، وقد لا يكون التعرف الضوئي على الحروف (OCR) ذا معنى |
| بقية الوضع | REVIEW | الفراغات الفارغة، والنص المتجه، والعناوين المتفرقة، والألغاز المعقدة كلها يمكن أن تكون هنا |
العتبات من 40 و0.70 تهدف إلى تسهيل التدقيق في هذه المجموعة من الاختبارات، وليس المعايير عبر اللغات. يجب أن تصنف الصينية، الصيغ، الأغلفة، والنماذج القصيرة بشكل منفصل. هنا، يتم التقاط أكبر صورة حسب مساحت، بدلا من مجرد إضافة مناطق الصور المتداخلة. لذلك، قد ينتهي الأمر بصفحة ممسوحة ضوئيا مكونة من عدة صور في مرحلة المراجعة. هذا حد تم الحفاظ عليه عمدا.
عينة كاملة قابلة للتشغيل
تستخدم العينة PyMuPDF==1.28.0، ولا تعتمد على Tesseract، ولا تستدعي أي خدمات OCR أو ترجمة عبر الإنترنت. احفظه ك example.py وشغله في مجلد فارغ. اسم الملف الذي تنشئه ثابت على routing-fixture.pdf. بالنسبة للمشاريع الحقيقية، يرجى عدم الكتابة فوق ملفات الإدخال.
import json
import pymupdf
def inspect_page(page):
chars = len("".join(page.get_text().split()))
bounds = page.cropbox
# 图片坐标与文本坐标都是未旋转坐标;不要混用旋转后的 page.rect。
bounds = pymupdf.Rect(0, 0, bounds.width, bounds.height)
ratios = []
for image in page.get_image_info():
rect = pymupdf.Rect(image["bbox"]) & bounds
ratios.append(max(0, rect.get_area()) / bounds.get_area())
largest = max(ratios, default=0.0)
route = ("TEXT_CANDIDATE" if chars >= 40 else
"OCR_CANDIDATE" if largest >= 0.70 else "REVIEW")
return {"page": page.number + 1, "chars": chars,
"largest_image_ratio": round(largest, 3), "route": route}
with pymupdf.open() as source:
page = source.new_page(width=360, height=480)
page.insert_text((28, 60), "Sample invoice 2026-09-26", fontsize=16)
page.insert_text((28, 100), "Quantity 12 Unit price USD 15.00", fontsize=12)
page.insert_text((28, 132), "Amount USD 180.00 Checked manually", fontsize=12)
scan = page.get_pixmap(matrix=pymupdf.Matrix(2, 2)).tobytes("png")
page = source.new_page(width=360, height=480)
page.insert_image(page.rect, stream=scan)
source.new_page(width=360, height=480)
source.save("routing-fixture.pdf")
with pymupdf.open("routing-fixture.pdf") as pdf:
result = [inspect_page(page) for page in pdf]
assert [r["route"] for r in result] == [
"TEXT_CANDIDATE", "OCR_CANDIDATE", "REVIEW"]
assert result[1]["chars"] == 0
assert result[1]["largest_image_ratio"] == 1.0
pdf[1].set_rotation(90)
assert inspect_page(pdf[1])["route"] == "OCR_CANDIDATE"
print(json.dumps(result, indent=2))
عند الوصول إلى OCR، قم بتخزين TextPage مؤقتا، وليس علامة نجاح
واجهة OCR في PyMuPDF هي page.get_textpage_ocr(...). يجب إعداد Tesseract وبيانات اللغة المقابلة له بشكل منفصل. بعد الحصول على صفحة نصية، يجب أن يتم تمرير الاستخراج اللاحق كمعلمة textpage لتجنب التعرف على التكرار في نفس الصفحة. للاطلاع على طرق التثبيت والمعايير المحددة، يرجى الرجوع إلى وثيقة OCR من PyMuPDF.
هذه المقالة لا تشغل محرك OCR، لذا فإن نتائج الاختبار تثبت فقط صحة منطق التوزيع واستخدام الإحداثيات، ولا تمثل معدل التعرف الصيني، أو معدل استعادة الجدول، أو جودة الترجمة. في الإنتاج، يجب تسجيل نسخة محرك OCR، حزمة اللغة، رقم الصفحة، ملخص ملف الإدخال، ونتائج العينة اليدوية. لا تحتفظ فقط بالسلسلة النهائية، وإلا سيكون من الصعب تفسير الصفحة التي يأتي منها الرقم.
ثلاثة أنواع من العيوب التي يسهل تجاهلها
طبقات النص المخفية قد تكون نصا مشوش. تحقيق عدد الأحرف يعني فقط "يمكنك الاستمرار في محاولة الاستخراج." تحتاج أيضا إلى التحقق مما إذا كانت الأحرف المستبدلة، أو الأسطر المكررة، أو حقول المفاتيح تتوافق مع العرض. يجب فحص العناصر الرئيسية مثل رقم العقد والمبلغ بشكل عشوائي.
النص الذي يرسمه المسار المتجه ليس نصا ولا صورا. سيدخلون في المراجعة. لا تضع علامة على الصفحات تلقائيا على أنها فارغة، ولا تسقط الصفحات بصمت.
استخدام الصفحة بعد إغلاق المستند سيؤدي إلى كائن غير صالح. يرجى الاحتفاظ بنطاق with pymupdf.open(...) وإصدار الملف فقط بعد الفحص المسبق، والتصيير، والاستخراج. لمزيد من التفاصيل حول الإحداثيات، ومعلومات الصور، ودورات حياة الصفحات، يرجى الرجوع إلى PyMuPDF Page API.
يجب أن تحدد ملفات PDF غير الموثوقة أيضا حجم الملف، وعدد الصفحات، وبكسلات العرض، والوقت، والذاكرة في عملية مستقلة. يختبر المثال الملفات الصغيرة فقط ولا يوفر صندوق رمل للملفات الخبيثة. قبل إنتاج واستخدام PyMuPDF، يجب عليك أيضا التحقق من شروط الترخيص وطريقة التوزيع الخاصة بك.
الانتقال من البث إلى سير عمل الترجمة
المخرج المؤهل ليس سلسلة نصية، بل سجل يحتوي على أرقام صفحات وأسباب اتخاذ القرار. قبل الترجمة، تأكد من الصفحات التي يمكن استخراجها بشكل موثوق؛ بعد الترجمة، يتم مراجعة المحتوى والأرقام والتخطيط. يمكنك عرض خدمات معالجة المستندات على إدخال منتج OmniDoc. البرنامج المحلي في هذا المقال يعمل بشكل مستقل ولا يعتمد على حساب OmniDoc، ولا يعني ذلك أنه خوارزمية منتج داخلية.
📊 مقارنة النواة
| المسار | شروط الزناد | الصفحة المناسبة | المخاطر الكبرى |
|---|---|---|---|
| الاستخراج المباشر (TEXT_CANDIDATE) | على الأقل 40 حرفا غير متباعد | صفحة الجسم لطبقة النص الحالية | قد تحتوي طبقات السجل الضوئي الضوئي السيء المخفية على نص مشوش |
| مرشحو OCR (OCR_CANDIDATE) | أقل من 40 كلمة، مع صورة واحدة تغطي على الأقل 70٪ | نسخة ممسوحة ضوئيا كاملة الصفحة | الصور النقية أيضا تلبي المتطلبات، لكن نتائج السجل الضوئي في الحرم قد لا تكون ذات معنى |
| الفحص اليدوي (مراجعة) | ولا يندرج في الفئتين السابقتين | صفحات فارغة، نصوص متجهة، عناوين متفرقة، ألغاز معقدة | الحكم اليدوي مطلوب؛ لا يمكن تخطي أو التخلص تلقائيا |
🎯 أي طريقة تناسبك؟
إذا كنت ......
- معالجة الوثائق المختلطة، مع اختلافات كبيرة في الجودة بين الصفحات الأمامية والخلفية: صفحة بصفحة قبل الفحص المسبق، كل منها يدخل مسارا مختلفا.
- يتعامل بشكل رئيسي مع العقود والوثائق المالية وغيرها من الوثائق التي تحتوي على أرقام مفتاحية: بالنسبة للصفحة TEXT_CANDIDATE، تحقق عشوائيا من التطابق بين الأرقام والتصاميم.
- المعالجة الدفعية للمسحات: إصدارات محرك السجلات، حزم اللغة، وأرقام الصفحات لنتائج التعرف الضوئي على الحروف الواضحة لتسهيل التتبع.
- استقبال ملفات PDF من مصادر غير معروفة: حدد حدود الموارد في العمليات المستقلة؛ لا تعالجها مباشرة في العملية الرئيسية.
❓ الأسئلة الشائعة (الأسئلة الشائعة)
1. يمكن للصفحة الرئيسية نسخ النص؛ هل يمكنني تخطي عملية OCR لملف PDF بالكامل؟
لا، لا يمكنك. وجود طبقة نصية في الصفحة الأولى لا يعني أن الصفحات التالية تحتوي عليها أيضا؛ يجب أن تحكم على صفحة بصفحة.
2. لماذا لا تجمع منطقة الصورة مباشرة؟
إضافة الصور المتداخلة حسب المنطقة سيؤدي إلى مبالغة في تقدير معدل التغطية. تأخذ هذه المقالة أكبر صورة حسب المساحة، لذا قد تقع الصفحات الممسوحة ضوئيا المجمعة من عدة صور ضمن قسم المراجعة، وهو حد متعمد.
3. إذا وصل عدد الحروف إلى 40، هل يعني ذلك أن جودة النص جيدة؟
لا يمكن الاستنتاج بهذه الطريقة. قد تحتوي طبقات OCR السيئة المخفية على العديد من الحروف، لذا لا يزال عليك التحقق من وجود شخصيات بديلة، وخطوط مكررة، وحقول مفاتيح النقطة.
4. كيف يجب التعامل مع النصوص المرسومة في مسارات متجهة؟
ليست نصا ولا صورا، تدخل REVIEW، ويتم تقييمها يدويا؛ لا يجب وضع علامة عليها تلقائيا كصفحات فارغة أو تم إسقاطها بصمت.
5. هل يعتمد البرنامج المحلي على حساب OmniDoc؟
لست معتمدة. البرنامج المحلي في هذا المقال يعمل بشكل مستقل ولا يستدعي أي خدمات OCR أو الترجمة عبر الإنترنت.
📝 ملخص
أولا، اترك الأدلة صفحة صفحة بصفحة قبل اتخاذ قرار إجراء الرقابة الضمانية على حقوق الإنسان. ترك صفحات غير مؤكدة في قائمة الانتظار أكثر فعالية من إخفاء النتائج غير المؤكدة على أنها نجاح.
اختبر الآن: ارفع مستندك لتبدأ الترجمة، مع الحفاظ على التنسيق الأصلي


