لا يمكن لـ pypdf استخراج النص من المستند الممسوح ضوئيًا. لا يمكن حلها عن طريق تغيير المعلمات.
يعد النص القصير أو الفارغ مجرد إشارة لمزيد من الفحص ولا يعادل المسح الضوئي بشكل مباشر. السجلات التالية صفحة تلو الأخرى سواء تم استخراج النص؛ تتطلب الصفحات الفارغة وصفحات الصور وصفحات التشفير غير الطبيعية أحكامًا لاحقة مختلفة. استخراج النص pypdf ليس التعرف الضوئي على الحروف.
عندما يتعذر على pypdf استخراج النص، فإن المشكلة عادةً لا تتعلق بالمعلمات. يقرأ الكائنات النصية في PDF. إذا كانت الصفحة عبارة عن صورة بشكل أساسي، فلن يتمكن ضبط المعلمات من قراءة الأحرف غير الموجودة. هذه المقالة مكتوبة للمطورين والعاملين في مجال المستندات الذين يحتاجون إلى معالجة ملفات PDF على دفعات ويواجهون "توجد كلمات ولكن الاستخراج فارغ". بعد القراءة، يمكنك استخدام البرنامج لتحديد صفحة تلو الأخرى ما إذا كانت طبقة النص موجودة وما إذا كانت صالحة، وتحديد ما إذا كنت تريد استخدامها مباشرة، أو إدخال التعرف الضوئي على الحروف، أو النقل إلى المراجعة اليدوية.
يتم عرض جميع الأمثلة أدناه باستخدام العينات الاصطناعية. لقد تم فحص عينة التعليمات البرمجية في بيئة معزولة، ولكن هذا لا يضمن جميع الملفات الحقيقية أو أداء المنتج. قبل معالجة المستندات المهمة، يرجى الاحتفاظ بالنسخ الأصلية ومراجعتها وفقًا للحدود وبنود القبول في النص.
لا يمكن استخراج النص من pypdf؟ استنتاج جملة واحدة
يعد النص القصير أو الفارغ مجرد إشارة لمزيد من الفحص ولا يعادل المسح الضوئي بشكل مباشر. استخراج النص من pypdf ليس التعرف الضوئي على الحروف. تحتاج إلى تحديد الوضع الفعلي لطبقة النص صفحة تلو الأخرى قبل اتخاذ قرار بشأن طريقة المعالجة اللاحقة.
| حالتك | الممارسات الموصى بها | سبب |
|---|---|---|
| النص المستخرج أقصر | احتفظ بالنص أولاً ولا تجبر على التعرف الضوئي على الحروف لأنه أقل من العتبة. | النص القصير هو مجرد إشارة لمزيد من الفحص |
| نتيجة الاستخراج فارغة | تحقق من صورة الصفحة ونوع المحتوى، ولا تحكم عليها مباشرة كنسخة ممسوحة ضوئيًا | النص الفارغ لا يساوي عمليات المسح |
| توجد كلمات مرئية على الصفحة، لكن نتائج الاستخراج عبارة عن أحرف فارغة أو مشوهة. | قم بالتبديل إلى عملية التعرف الضوئي على الحروف (OCR). | يقرأ pypdf كائن النص، ولا يوجد ترميز أحرف قابل للقراءة في الصورة |
| طبقة النص الخاصة بملف PDF ثنائي الطبقة غير مكتملة أو غير محاذية للصورة | قم بالدمج في قائمة انتظار المراجعة اليدوية أو قم بإجراء مقارنة مرئية | قد تغطي طبقة النص جزءًا فقط من المحتوى، ويمكن تحويل التعليمات البرمجية ولكن لا يمكن ضمان صحة الدلالات. |
| حدث خطأ أثناء عملية التحليل | سجل مرحلة غير طبيعية | لا ينبغي أن تتظاهر بأنها صفحة فارغة |
التمييز التقني بين تحليل النص والتعرف على الصور
عندما يواجه العديد من الأشخاص فشلًا في الاستخراج، فإن رد فعلهم الأول هو التحقق مما إذا كان extraction_mode="layout" مفقودًا، أو ما إذا كانت زاوية الدوران بحاجة إلى تحديد. ولكن في معظم السيناريوهات الهندسية، يعد هذا عدم تطابق في اختيار الأداة وليس مشكلة في المعلمة. pypdf هو في الأساس محلل PDF Content Stream الذي يقرأ تعليمات كائن النص المضمنة في الملف. إذا كان ملف PDF عبارة عن صورة (مسح ضوئي) بشكل أساسي، بغض النظر عن كيفية ضبط وضع الاستخراج، فلا يمكن قراءة الأحرف من فراغ.
لفهم ذلك، يجب علينا أولاً التعرف على غرض التصميم الأصلي لملف PDF. تم تصميم ملف PDF للطباعة الدقيقة والعرض المرئي، وليس لتخزين البيانات المنظمة. يحتوي ملف PDF الأصلي الرقمي على موارد الخطوط وخرائط التشفير وتعليمات رسم النص ذات الموضع المطلق. يستعيد pypdf النص عن طريق تحليل هذه التعليمات. ميزة هذه الآلية هي الحتمية: فهي لا تخلط بين الكلمات المتشابهة (مثل 0 وO)، ويمكنها الحفاظ على الرموز الخاصة والأحرف المركبة، ولا تتأثر بضجيج الصورة.
لماذا لا يمكنني استخراج ملف PDF الممسوح ضوئيًا؟
ملفات PDF الممسوحة ضوئيًا هي مجرد حاويات للصور. النص المرئي هو مجرد مصفوفة من وحدات البكسل في بنية الملف، ولا يوجد كائن نصي يمكن قراءته بواسطة extract_text().
لماذا تكون نتيجة طبقة PDF المزدوجة غير مستقرة؟
تتم معالجة بعض المستندات الممسوحة ضوئيًا باستخدام برنامج التعرف الضوئي على الحروف (OCR) وتحتوي على طبقة نص مخفية مضمنة، تُعرف باسم "ملف PDF مزدوج الطبقة". يمكن لـ pypdf استخراج هذا المستوى من المحتوى فقط. إذا كانت جودة التعرف الضوئي على الحروف الأصلية رديئة، أو كانت طبقة النص مفقودة، أو كان التشفير تالفًا، أو كان محاذيًا بشدة للصورة، فستكون نتائج الاستخراج غير مكتملة أو حتى فارغة تمامًا. ليس من المنطقي الاستمرار في تصحيح أخطاء معلمات pypdf في هذا الوقت، ويجب عليك التبديل إلى عملية التعرف البصري على الأحرف (OCR).
لا ينبغي أن يعتمد أساس الحكم على معرفة ما إذا كانت هناك كلمات في الصفحة بالعين المجردة، بل ينبغي استخدام برنامج للكشف عن الوجود الفعلي وصلاحية طبقة النص.
📊 المقارنة الأساسية
| نوع الملف | هل يمكنك استخراج ملف pypdf مباشرة؟ | أساس الحكم | التعامل مع المتابعة |
|---|---|---|---|
| PDF رقمي أصلي | نعم، يمكنك | تحليل الخطوط، ترميز الخرائط، وأوامر رسم النصوص | استخدام نتائج الاستخراج مباشرة |
| نسخة PDF ممسوحة ضوئيا عادية | لا | فقط البكسلات، لا يوجد كائنات نصية | هنا يأتي دور عملية OCR |
| ملف PDF مزدوج الطبقة | يمكن استخراج طبقة النص المخفية فقط | قد تكون طبقات النص مفقودة أو تالفة أو غير محاذية | افحص الاكتمال، وراجع يدويا أو قارن بصريا عند الضرورة |
مثال على التوليف: التحقق من منطق الكشف باستخدام خط أساس اختبار
لإظهار كيفية التمييز البرمجي بين الحالات السابقة، يجب أولا بناء مجموعة من مدخلات التوليف الموحدة. الكود التالي هو عرض منطقي فقط ويجب تشغيله في بيئة اعتماد ذاتية القفل؛ وهو ليس تقرير اختبار لملفات إنتاج محددة. يرجى إعداد بيانات الاختبار باستخدام الطرق التالية:
- أرقام نورمال PDF: تصدير المستندات التي تحتوي على نص "فاتورة #2024-001" بلغة Word أو LaTeX.
- ملف PDF للمسح النقي: مسح المستند الورقي إلى JPEG، ثم غلفه في ملف PDF من صفحة واحدة، مع التأكد من عدم وجود طبقات نصية مرفقة.
- عينة حالة الحدود: إنشاء ملف PDF "شبه OCR" مع طبقة نصية تتكون من سلاسل فارغة أو كل المسافات، محاكاة مستند مزدوج الطبقات لا يتعرف عليه.
كود فحص قابلية استخدام طبقة النص
يوضح المثال التالي لبايثون كيفية بناء منطق الكشف في الذاكرة. يعتمد الكود على pypdf>=3.0.0. يرجى تثبيت النسخة المقابلة في بيئة افتراضية مستقلة. السكربت لا يحتوي على مسار الملف الحقيقي. يرجى استبدال مسار التبديل المؤقت بملف الاختبار الصناعي المذكور قبل التشغيل.
from io import BytesIO
import pymupdf
from pypdf import PdfReader
with pymupdf.open() as doc:
page = doc.new_page()
page.insert_text((50, 50), "Hi")
doc.new_page()
raw = doc.tobytes()
reader = PdfReader(BytesIO(raw))
records = []
for index, page in enumerate(reader.pages):
text = page.extract_text() or ""
records.append({"page": index + 1, "text": text,
"status": "text_present" if text.strip() else "review_empty_text"})
assert len(records) == 2
assert records[0]["status"] == "text_present"
assert records[0]["text"].strip() == "Hi"
assert records[1]["status"] == "review_empty_text"
قرار القبول وحدود المراجعة اليدوية
عروض الكود تعالج فقط الحكم الثنائي حول "ما إذا كان هناك طبقة نصية"، ويتطلب تأثير النهاية النظر في عوامل أكثر واقعية. يسرد الجدول أدناه الملاحظات الشائعة وقرارات التعامل المصاحبة، موضحا نطاق عمليات الأتمتة ونقاط التدخل اليدوي:
| الملاحظة | ما الذي يجب فعله | ولا ينبغي الحكم عليه |
|---|---|---|
| نص قصير | النص لا يزال محفوظا | السجل الضوئي للسجلات البصرية لا يجبر فقط لأن الحد الأدنى |
| نص فارغ | تحقق من صور الصفحات وأنواع المحتوى | لا يصنف مباشرة كمسح ضوئي |
| فشل التحليل | المراحل غير الطبيعية القياسية | لا تخفي الأمر كصفحة بيضاء |
يجب إيلاء اهتمام خاص عندما يحتوي المستند على طبقات نصية اختيارية وطبقات صورية، فلا يمكن ببساطة الوثوق بسلامة طبقة النص. بعض الماسحات الضوئية تولد ملفات PDF ذات طبقتين، حيث تغطي طبقة النص جزءا فقط من المحتوى، أو تكون الإحداثيات غير محاذية بشكل كبير مع الصورة. يجب تضمين مثل هذه الحالات في قوائم المراجعة اليدوية أو إعادة التحقق منها بواسطة خوارزميات المقارنة البصرية.
المراجع
- وثيقة استخراج النصوص الرسمية من pypdf: Extract Text from a PDF
- شرح PYPDF للفرق بين التعرف الضوئي على الحروف واستخراج النصوص: نفس قسم المستند أعلاه "OCR مقابل استخراج النص"
استخدم قوائم التحقق لترجمة المستندات
تقسيم المستندات، التشفير، أو التعامل مع المرفقات هي مهام تحضيرية قبل التسليم؛ لا يمكن للترجمة أن تحل محل هذه الفحوصات. ينصح أولا بالاحتفاظ بالأصل وقائمة التحقق من المعالجة، ثم تقييم ترتيب الصفحات، والروابط، واكتمال محتوى الترجمة.
توفر أومني دوك (إدخال المنتج) بوابات ترجمة وثائق متعددة الصيغ، ويقدم موقعها الرسمي ميزات التعرف الضوئي على الحروف الضوئية، والقواميس، وميزات المراجع ثنائية اللغة. إذا أردت البدء مباشرة من الملف، يمكنك تقييم هذا المسار باستخدام عينات فعلية. يرجى استخدام الملف المجهول الذي تفوض لرفعه والتحقق من النتائج باستخدام قائمة التحقق في هذا المقال. لا تدعي هذه المقالة أن أومنيدوك يستخدم المكتبات مفتوحة المصدر أو الخوارزميات الداخلية المذكورة هنا، ولا يمكن للأمثلة أن تحل محل اختبار أداء المنتج.
🎯 أي طريقة تناسبك؟
إذا كنت ......
- ملف PDF الذي تستلمه يمكنه اختيار النص: في معظم الحالات، يمكنك استخراجه مباشرة باستخدام pypdf والاحتفاظ بنتائج النص.
- النتائج المستخرجة قصيرة جدا أو فارغة: أولا تحقق من صورة الصفحة ونوع المحتوى، ثم قرر ما إذا كان التعرف على الحرارة؛ لا تتسرع في الاستنتاجات.
- النص على الصفحة مرئي، لكنه لا يمكن استخراجه: انتقل إلى عملية OCR دون تعديل المعاملات بشكل متكرر.
- التعامل مع ملفات PDF ذات الطبقتين: تحقق مما إذا كانت طبقة النص مكتملة ومتوافقة مع الصور؛ إذا كنت في حالة شك، يرجى الرجوع إلى المراجعة اليدوية.
❓ الأسئلة الشائعة (الأسئلة الشائعة)
1. إذا لم تستطع استخراج النص، هل يعني ذلك أنه دائما مسح؟
ليس بالضرورة. النص القصير أو الفارغ هو مجرد إشارة لمزيد من الفحص؛ يجب عليك التحقق من صورة الصفحة ونوع المحتوى قبل اتخاذ القرار.
2. هل يمكن لتعديل extraction_mode حل مشكلة استخراج الملفات الممسوحة؟
لا. يقرأ PYPDF كائنات نصية، والصورة الممسوحة ضوئيا تفتقر إلى ترميز الأحرف القابل للقراءة، لذا لا يمكن لتعديلات المعلمات إنتاج نص من العدم.
3. هل يمكن ل pypdf أن يحل محل OCR؟
لا. استخراج النصوص في Pypdf ليس OCR؛ يمكنه فقط قراءة كائنات النص الموجودة بالفعل في الملف.
4. هل يمكن الوثوق مباشرة بطبقة نصية في ملف PDF مزدوج الطبقات؟
لا يمكنك الوثوق بهم مباشرة. قد تغطي طبقة النص جزءا فقط من المحتوى أو تكون غير محاذية مع إحداثيات الصورة، لذا يجب استخدام المراجعة اليدوية أو المقارنة البصرية للتحقق الثانوي.
5. النص المستخرج قليل جدا، هل يجب إجراء المراجعة الضوئية فورا؟
لا حاجة لإجبار التعرف على الحروف الضوئية بسبب هذا. يقترح النص الأصلي الاحتفاظ بالنص القصير أولا، ثم النظر في نقاط تفتيش أخرى.
📝 ملخص
إذا لم تستطع الحصول على نص في pypdf، فلا تتسرع في تعديل المعايير. قيم الوضع الفعلي في النص صفحة بصفحة، ثم قرر ما إذا كنت ستستخدمه مباشرة، أو تدخل التعرف الضوئي على الحرارة، أو تنتقل إلى المراجعة اليدوية، مما سيعطي نتائج أكثر موثوقية.
اختبر الآن: ارفع مستندك لتبدأ الترجمة، مع الحفاظ على التنسيق الأصلي


