قم بتمييز كلمات البحث في PDF، لماذا يقوم المستطيل بتأطير النص المائل بشكل غير صحيح؟
الخطوط المائلة لا تجعل بالضرورة مساحة الرباعي الذي تم البحث عنه أصغر من المستطيل المحيط به. عندما تحتاج إلى الاحتفاظ بمعلومات الاتجاه ذات الزوايا الأربع، استخدم مباشرة نتيجة Quads=True لإضافة التمييز؛ لا تستخدم أي عتبة اختلاف في المساحة لتحديد ما إذا كان التمييز صحيحًا.
عندما يكون مربع تمييز البحث للنص المائل منحرفًا، فغالبًا ما لا يكون ذلك بسبب وجود مشكلة في الخط نفسه، ولكن بسبب تحديد الكائن الهندسي المستخدم للتمييز بشكل خاطئ. هذه المقالة مخصصة للمطورين الذين يستخدمون PyMuPDF لمعالجة تحديد موضع نص PDF. وهو يشرح لماذا لا يمكن استخدام المستطيل المتضمن (المستطيل) لتحديد ما إذا كان تمييز النص المائل أو الذي تم تدويره صحيحًا، وكيفية التعامل معه في مواقف مختلفة.
بعد قراءة هذه المقالة، يمكنك أن تقرر ما إذا كنت تريد استخدام Quad أو Rect لنتائج البحث، ومعرفة كيفية التعامل مع عدم وجود نتائج، والصفوف المتقاطعة، والنتائج المتعددة، واقتصاص CropBox عند البحث، وفهم المشكلات التي تقع خارج نطاق التحديد الهندسي للموضع.
يتم عرض النص الكامل باستخدام عينات تركيبية، وقد اجتاز الكود اختبارات العينات في بيئة معزولة، لكن هذا لا يمثل ضمانًا لجميع الملفات الحقيقية أو تأثيرات المنتج. قبل معالجة المستندات المهمة، يرجى الاحتفاظ بالنسخ الأصلية ثم مراجعتها وفقًا للحدود وبنود القبول أدناه.
لتمييز النص المائل في البحث، اختر Quad أو Rect؟ استنتاج جملة واحدة
الخط المائل لا يجعل بالضرورة المساحة الرباعية التي تم الحصول عليها من خلال البحث أصغر من المستطيل المتضمن. عندما يكون من الضروري الاحتفاظ بمعلومات الاتجاه ذات الزوايا الأربع، استخدم نتائج quads=True مباشرة لإضافة النقاط البارزة. لا تستخدم أي حد لاختلاف المساحة لتحديد ما إذا كان التمييز صحيحًا أم لا.
| حالتك | الممارسات الموصى بها | سبب |
|---|---|---|
| نص مائل أو مستدير، يجب الحفاظ على اتجاه الزوايا الأربع | استخدم نتائج quads=True مباشرة لإضافة النقاط البارزة | يحتفظ Quad بمعلومات الاتجاه ذات الزوايا الأربع |
| أريد استخدام عتبة فرق المساحة لتحديد ما إذا كان التمييز صحيحًا أم لا. | لا تفعل هذا | الخط المائل لا يجعل بالضرورة المساحة الرباعية أصغر، ولا يمكن الاعتماد على حكم الحد الأدنى. |
| تمتد مصطلحات البحث عبر السطور ولا يتعرف عليها المحرك على أنها نفس وحدة المفردات. | احتفظ بجميع الأجزاء الرباعية التي تم إرجاعها وارسم النقاط البارزة بشكل فردي | سيؤدي الدمج القسري في المستطيل إلى فقدان دلالات المساحة البيضاء في المنتصف. |
| تحتوي الصفحة على اقتصاص CropBox | تأكد من أن المحتوى لا يزال ضمن المنطقة القابلة للعرض بعد استعادة CropBox | تعتمد الإحداثيات التي يتم إرجاعها بواسطة search_for على مساحة الصفحة الأصلية التي لم يتم تدويرها ولا يمكن افتراض أن get_text يتجاهل المساحة المقصوصة بشكل افتراضي |
| ضربات متعددة | احتفظ بأرقام الصفحات عنصرًا بندًا وقم بمعالجتها واحدًا تلو الآخر | فقط معالجة الأول سوف تفوت المواقف المتبقية |
لماذا يظهر النص المائل بشكل غير صحيح؟
سيفترض العديد من الأشخاص افتراضيًا أن المستطيل المحيط بالأحرف المائلة أكبر بكثير من المربع الرباعي، لذا فإن استخدام Rect للتمييز سيؤدي إلى "انحراف الإطار". في الواقع، لا يجعل الخط المائل بالضرورة مساحة المربع الذي تم البحث عنه أصغر من المستطيل المحيط، لذلك لا يمكن الاعتماد على استخدام اختلاف المساحة للحكم على ما إذا كان التمييز صحيحًا.
ما نحتاجه حقًا هو الحفاظ على معلومات التوجيه الخاصة بالزوايا الأربع. يحدث أن يقوم Quad بتسجيل هذه المعلومات، ويعتبر استخدامه لإضافة الإبرازات مباشرة أكثر موثوقية من استخدام مستطيل متضمن لتخمين الشكل.
مثال على تكوين قائم بذاته
راجع قائمة الاستيراد على سبيل المثال التبعيات. يقوم الكود بإنشاء مدخلات في الذاكرة ولا يتطلب تشغيل ملفات خارجية. يتم توفير سجلات العملية بشكل منفصل ولا تمثل ضمانًا بأن جميع المستندات أصلية.
import pymupdf
with pymupdf.open() as source:
page = source.new_page(width=300, height=300)
page.insert_text((100, 250), "Searchable", fontsize=14, rotate=90)
hits = page.search_for("Searchable", quads=True)
assert len(hits) == 1
assert isinstance(hits[0], pymupdf.Quad)
page.add_highlight_annot(hits)
assert page.search_for("Missing", quads=True) == []
raw = source.tobytes()
with pymupdf.open(stream=raw, filetype="pdf") as doc:
page = doc[0] # Keep the owning page alive while using annotations.
annotations = list(page.annots())
assert len(annotations) == 1
assert len(annotations[0].vertices) == 4
المعالجة الصحيحة للمخرجات وإدخال الحدود
ينشئ المثال الاصطناعي أعلاه ملف PDF في الذاكرة يُستخدم للتحقق من سلوك Quad. فيما يلي العديد من مدخلات الحدود المشتركة.
1. كلمات البحث تمتد عبر السطور
إذا كان مصطلح البحث يمتد إلى أسطر جديدة ولم يتعرف عليه المحرك باعتباره نفس وحدة المفردات، فقد يعرض search_for قائمة فارغة أو يطابق أجزاء جزئية فقط.
- لا تقم بدمج عدة رباعيات غير متجاورة بالقوة في مستطيل واحد، وإلا سيتم فقدان دلالات المساحة البيضاء في المنتصف.
- احتفظ بجميع الأجزاء الرباعية التي تم إرجاعها وارسم النقاط البارزة بشكل منفصل.
2. يحتوي مصطلح البحث على أحرف خاصة عادية
إذا كان مصطلح البحث يحتوي على أحرف خاصة عادية دون الهروب منها، فقد لا تكون النتائج كما هو متوقع. يجب معالجة سلسلة الإدخال بأمان قبل الاتصال.
3. اقتصاص CropBox
إذا كانت الصفحة تحتوي على اقتصاص CropBox، فستظل الإحداثيات التي يتم إرجاعها بواسطة search_for تعتمد على مساحة الصفحة الأصلية التي لم يتم تدويرها. بعد استعادة CropBox، تحتاج إلى التحقق من أن المحتوى لا يزال ضمن المنطقة المرئية. لا يمكنك افتراض أن get_text يتجاهل مساحة الاقتصاص بشكل افتراضي.
معايير القبول وحدود المراجعة اليدوية
هذا الحل يحل فقط مشكلة تحديد المواقع الهندسية. الحالات التالية ليست مسألة اختيار بين Quad وRect:
- طبقة النص في ملف PDF نفسه تالفة؛
- تضمين الخط غير طبيعي؛
- هناك طبقات مخفية.
في هذه الحالات، قد لا تكون نتائج search_for ذات مصداقية على الإطلاق ويجب تقديمها للمراجعة اليدوية أو إعادة التعرف الضوئي على الحروف. يتحقق نموذج التعليمات البرمجية فقط من الخصائص الهندسية، ولا يزال التأثير الشامل بحاجة إلى التقييم استنادًا إلى أنواع مستندات محددة.
قرارات التعامل مع الاستثناءات المحددة
| يراقب | ما يجب القيام به | لا ينبغي الاستدلال |
|---|---|---|
| بحث لا يضرب | تحقق من طبقة النص والكلمات الرئيسية | لا تقم بإنشاء الضوء الفارغ |
| تدوير النص | احتفظ بزوايا الساحة الأربع | تخمين الدقة بعدم استخدام اختلافات المساحة |
| وأصاب الهدف في العديد من الأماكن | يجب الاحتفاظ بكل عنصر مع أرقام صفحات | لا تكتفي بالأول |
📊 مقارنة النواة
| الهدف | معلومات يمكن حفظها | السيناريوهات المناسبة | ملاحظات |
|---|---|---|---|
| Quad | الزوايا الأربعة | يتطلب النص المائل والدوار تمييزا دقيقا | استخدم نتائج quads=True مباشرة |
| المستقيم (مستطيل خارجي) | نطاق التلامس الخارجي | اختيار بسيط للنص الأفقي | قد يكون النص المائل أو الدوار غير متوقع وغير مناسب للتحقق من الدقة |
| الريكت المدمج | النطاق العام | غير موصى به للبحث عبر الخطوط | هذا سيفقد معنى المناطق الفارغة في المنتصف |
🎯 أي طريقة تناسبك؟
إذا كنت ......
- يجب حفظ زوايا النص: استخدم نتائج
quads=Trueمباشرة لإضافة التمييزات. - هل تريد الحكم على ما إذا كان التظليل صحيحا بناء على عتبة فرق المساحة: لا تفعل ذلك؛ الخطوط المائلة لا تجعل بالضرورة مساحة الرباعية أصغر.
- إذا واجهت مصطلحات البحث تتجاوز الخطوط: احتفظ بجميع مقاطع Quad، وظلها بشكل منفصل، ولا تدمجها في Rect واحد.
- التعامل مع الصفحات مع قص cropBox: بعد استعادة CropBox، تحقق من أن المحتوى لا يزال ضمن المنطقة القابلة للعرض.
استخدم هذه القائمة لترجمة المستندات
أولا، تحقق من ترتيب الصفحات، وموقع المصدر، وسلامة النص بدقة، ثم سلم نفس العينة المجهولة الهوية إلى عملية الترجمة. بعد الترجمة، لا يزال من الضروري التحقق مما إذا كان العنوان والنص الرئيسي والتعليقات تتوافق بشكل صحيح؛ لا يكفي الحكم فقط بناء على ما إذا كان النص طليقا.
توفر أومني دوك (إدخال المنتج) بوابات ترجمة مستندات متعددة الصيغ، ويقدم موقعها الرسمي ميزات المرجع المرجعي للحقوق الضوئية والمصطلحات وثنائية اللغة. بالنسبة للفرق التي ترغب في البدء مباشرة من الملفات، هذا مسار يستحق التقييم باستخدام عينات فعلية. يرجى استخدام الملف المجهول الذي تفوض لرفعه والتحقق من النتائج باستخدام قائمة التحقق في هذا المقال. هذا لا يدعي أن أومنيدوك يستخدم المكتبات مفتوحة المصدر أو الخوارزميات الداخلية المذكورة في هذا المقال، ولا تحل الأمثلة محل اختبار أداء المنتج.
المراجع
❓ الأسئلة الشائعة (الأسئلة الشائعة)
1. هل النص المائل بالضرورة يجعل مساحة المربع أصغر؟
ليس بالضرورة. الرموز المائلة لا تعطي بالضرورة مساحة رباعية أصغر من المستطيل الخارجي، لذلك لا يمكنك الاعتماد على فروق المساحة لتحديد ما إذا كان التظليل صحيحا.
2. متى يجب الاحتفاظ بمعلومات الرباعي الرباعي؟
إذا كنت بحاجة للاحتفاظ بمعلومات الاتجاه للزوايا الأربع، يجب عليك استخدام نتائج quads=True مباشرة لإضافة التمييز.
3. ماذا يجب أن تفعل إذا تجاوز مصطلح البحث الحدود ولم يصيب الهدف؟
لا تنشئ أضاءات فارغة؛ أولا تحقق من طبقة النص والكلمات المفتاحية. إذا تم إعادة جزء فقط من المقطع، يجب الاحتفاظ بجميع مقاطع الأربعة المستعادة وتظليلها بشكل منفصل، بدلا من دمجها بالقوة في مستقيم واحد.
4. تتضمن الصفحة CropBox. ما الذي يجب أن تنتبه له عند القص؟
الإحداثيات التي يعيدها search_for لا تزال مبنية على مساحة الصفحة الأصلية التي لم يتم تدويرها. بعد استعادة CropBox، تحتاج إلى التحقق مما إذا كان المحتوى لا يزال ضمن خط العرض؛ لا يمكنك افتراض أن get_text يتجاهل منطقة القص بشكل افتراضي.
📝 ملخص
يجب أن يكون تمييز الخط المائل والنص الدوار مبنيا على المربع الرباعي، ويجب الاحتفاظ بأرقام الصفحات ومعلومات الزوايا لكل عنصر. مشاكل مثل تلف طبقة النص وتضمين الخط غير الطبيعي لا تزال تتطلب مراجعة يدوية أو إعادة تسجيل التعرف عليك (OCR).


