PDFMove
كيف يعمل استخراج البنية من PDF؟ الملف الموسوم واكتشاف العناوين
دليل

كيف يعمل استخراج البنية من PDF؟ الملف الموسوم واكتشاف العناوين

7 دقيقة للقراءة

إنتاج Markdown من PDF مسألة استنتاج صعبة في الواقع. لأن معلومة «هذا عنوان» أو «هذه الفقرة تُقرأ بعد تلك» غير موجودة في PDF في أغلب الأحيان. نشرح في هذا المقال ما تفعله المحوّلات، وأي القرائن تستخدم، ولماذا تنجح في بعض المستندات وتخفق في غيرها.

ما يحفظه PDF وما لا يحفظه

محتوى صفحة PDF مؤلف من أوامر رسم:

BT
/F2 18 Tf              % select 18 pt font
72 720 Td              % move to position
(Introduction) Tj      % write "Introduction"
ET
BT
/F1 11 Tf              % select 11 pt font
72 690 Td
(The topic addressed in this study...) Tj
ET

ما يوجد في هذه الأوامر: أي الحروف ستُرسَم، وبأي خط، وبأي مقاس، وعند أي إحداثية.

وما لا يوجد: أن كلمة "Introduction" عنوان. وأن النص الذي يليها هو الفقرة الواقعة تحت ذلك العنوان. وأين تنتهي الفقرة وتبدأ الأخرى.

والإنسان حين ينظر إلى الصفحة يدرك ذلك فوراً — لأن رؤية كلمة بخط عريض ببنط 18 وحدها في سطر تعني «عنواناً». وعلى المحوّل أن يجري الاستنتاج نفسه.

PDF الموسوم: الحالة التي لا تحتاج إلى استنتاج

PDF الموسوم (tagged) يحمل إلى جانب محتوى الصفحة البنية الدلالية للمستند. فتوجد في الملف شجرة بنية:

Document
├── H1 "Introduction"
│   └── P "The topic addressed in this study..."
├── H2 "Method"
│   ├── P "The research proceeded in these steps..."
│   └── L (list)
│       ├── LI "First step"
│       └── LI "Second step"
└── Table
    ├── TR
    │   ├── TH "Year"
    │   └── TH "Value"
    └── TR ...

وهذه الشجرة هي المعلومات التي يحتاجها Markdown بالضبط. وإنتاج Markdown من ملف PDF موسوم عمل إسناد مباشر لا استنتاج:

| وسم PDF | Markdown | |---|---| | H1، وH2، وH3 | #، و##، و### | | P | فقرة | | L / LI | قائمة - | | Table / TR / TD | جدول Markdown | | Link | [text](url) | | Figure | ![alt](image) |

والنتيجة أفضل بصورة صارخة منها في ملفات PDF غير الموسومة.

من أين يأتي PDF الموسوم؟

  • ملفات PDF المنتَجة من Word مع تفعيل خيار «وسوم بنية المستند»
  • المستندات المؤسسية المعدّة وفق متطلبات إتاحة الوصول
  • المستندات المطابقة لمعيار PDF/UA‏ (Universal Accessibility)

ومن أين لا يأتي؟

  • الملفات المنتَجة بطريق «الطباعة إلى PDF»
  • معظم مخرجات برامج التصميم (ما لم يُضبَط إعداد خاص)
  • المستندات الممسوحة
  • ملفات PDF القديمة

وتستطيع معرفة ما إذا كان مستندك موسوماً من نافذة خصائص المستند في عارض PDF.

عملية الاستنتاج في PDF غير الموسوم

إن لم توجد وسوم فعل المحوّل ما يلي بالترتيب.

1. جمع أجزاء النص

يحفظ PDF النص على شكل أجزاء صغيرة. فقد يكون أمر رسم واحد كلمةً أحياناً، وبضعة حروف أحياناً، ومحرفاً واحداً أحياناً — خصوصاً في النصوص المضبوطة التباعد.

ويكوّن المحوّل الكلمات والأسطر بدمج الأجزاء الواقعة في السطر نفسه والقريبة بعضها من بعض.

والصعوبة: إيجاد حدود الكلمات. فمحرف المسافة لا يُكتَب دائماً في PDF؛ بل يُدفَع المؤشر إلى الأمام أحياناً فحسب. ويضطر المحوّل إلى اتخاذ قرار «هنا مسافة» بالنظر إلى المسافة بين الأجزاء. فإن اختير الحدّ خطأً إما التصقت الكلمات وإما نشأت مسافة في وسط الكلمة.

2. تجميع الأسطر في فقرات

هل تنتمي الأسطر المتعاقبة إلى الفقرة نفسها؟ القرائن:

  • المسافة الرأسية: هل التباعد بين الأسطر معتاد أم أكبر منه؟
  • إزاحة السطر الأول: فقد تبدأ الفقرة الجديدة بإزاحة.
  • نهاية السطر السابق: فإن كان السطر يمتد إلى آخر عرض الصفحة فهو مستمر؛ وإن انتهى مبكراً فقد يكون نهاية فقرة.
  • الترقيم: فالسطر القصير المنتهي بنقطة علامة على نهاية فقرة.

3. تحديد ترتيب القراءة

وهذه أصعب خطوة.

ففي ملف PDF غير موسوم تُحفَظ أجزاء النص بترتيب الرسم، وليس بالضرورة أن يكون هذا الترتيب هو ترتيب القراءة البصري. فقد يكون برنامج تصميم قد رسم كل العناوين أولاً ثم نص المتن.

ويحاول المحوّل بناء ترتيب منطقي بالنظر إلى إحداثيات الأجزاء. وهذا سهل في صفحة من عمود واحد: من أعلى إلى أسفل، ومن جهة إلى أخرى.

وتبدأ المشكلة في التخطيط متعدد الأعمدة. ففي صفحة من عمودين، إن رتّبت الأسطر ببساطة من أعلى إلى أسفل، تداخلت النصوص لأن السطر الأول من العمود الأول يقع بجوار السطر الأول من العمود الثاني:

«الغاية من هذه الدراسة والنتائج المستخلصة تبيّن أن العينات المفحوصة...»

خليط بلا معنى. والمحوّلات الجيدة تجري اكتشاف أعمدة: فتنظر في التوزيع الأفقي لكتل النص وتجد ممرات الفراغ وتفصل الأعمدة. لكن هذا تخمين أيضاً ويخيب في التخطيطات المعقدة.

4. اكتشاف العناوين

يقيّم المحوّل القرائن التالية:

| القرينة | الوزن | |---|---| | مقاس الخط (أكبر من المتن) | مرتفع | | خط عريض | متوسط | | تغيّر عائلة الخط | متوسط | | قصر السطر | متوسط | | فراغ زائد فوقه/تحته | متوسط | | نمط الترقيم (1.، و1.1.) | مرتفع | | كتابته بأحرف كبيرة | منخفض | | وقوعه في أعلى الصفحة | منخفض |

ثم تُقسَّم هذه المرشحات إلى مستويات: فإن وُجدت في المستند خمسة مقاسات عناوين مختلفة، صار الأكبر H1، والتالي H2، وهكذا.

الأخطاء النمطية:

  • تُحسَب جملة توكيد مكتوبة بخط عريض عنواناً.
  • ويُحسَب عنوان فرعي ببنط صغير نصَّ متن.
  • وتختلط المستويات إن استُخدمت أنماط عناوين مختلفة في أقسام مختلفة من المستند نفسه.
  • وتُحسَب تسميات الأشكال والجداول عناوين.

5. اكتشاف القوائم

تُكتشَف علامات التعداد (•، و-، و▪) والأرقام (1.، وa)، وi.). ويحدد مستوى الإزاحة القوائم المتداخلة.

والمشكلة: أن علامة التعداد في PDF تكون أحياناً كائن رسم منفصلاً (لا نصاً)، وأحياناً محرفاً خاصاً، وأحياناً مجرد محاذاة بصرية مصنوعة بالمسافات. ويستحيل الاكتشاف في الحالة الثالثة.

6. اكتشاف الجداول

من أصعب البنى. ويُستخدم نهجان:

القائم على الخطوط: إيجاد الخطوط الأفقية والرأسية في الصفحة وتكوين شبكة. ويعمل جيداً في الجداول ذات الخطوط.

القائم على المحاذاة: النظر في المحاذاة الرأسية لأجزاء النص وتخمين الأعمدة. وهو السبيل الوحيد في الجداول بلا خطوط لكنه هشّ — إذ قد تُحسَب فقرة عادية جدولاً أحياناً.

وحتى إن اكتُشف الجدول فصياغة جداول Markdown محدودة: فلا يمكن التعبير عن الخلايا المدمجة والجداول المتداخلة والتنسيق متعدد الأسطر داخل الخلية.

الرأس والتذييل والضوضاء

توجد أعلى كل صفحة وأسفلها عناصر متكررة: عنوان المستند، واسم القسم، ورقم الصفحة، وحقوق النشر، والتاريخ.

وهذه جزء من محتوى الصفحة وقد يحسبها المحوّل محتوى. والنتيجة أسطر ضوضاء تتكرر كل بضع فقرات.

والمحوّلات الجيدة تستخدم حدساً: النص المتكرر في الموضع نفسه في صفحات متعددة هو رأس/تذييل. ويفيد هذا الاكتشاف عادةً لكنه يخيب في أرقام الصفحات (لأنها تختلف في كل صفحة).

مشكلة ترميز الخطوط

يعطي استخراج النص في بعض ملفات PDF نتائج غريبة: محارف بلا معنى، وحروف ناقصة، ولغات مختلطة.

والسبب آلية ترميز الخطوط في PDF. فقد تُحفَظ الحروف في ملف PDF بـأرقام الرسوم (glyph) داخل الخط، وينبغي وجود جدول إسناد (ToUnicode CMap) يعطي مقابلات هذه الأرقام في Unicode.

فإن كان هذا الجدول ناقصاً أو تالفاً، لم يستطع المحوّل تحويل أرقام الرسوم إلى الحروف الصحيحة. وتبدو الصفحة صحيحة على الشاشة (لأن الرسم صحيح) لكن استخراج النص يعطي مخرجات بلا معنى.

وقد تظهر هذه المشكلة في المستندات غير اللاتينية خصوصاً.

لماذا تتحول بعض ملفات PDF جيداً وأخرى رديئاً

العامل الحاسم هو كيفية إنتاج ملف PDF:

| المصدر | جودة التحويل | السبب | |---|---|---| | Word (موسوم) | ممتازة | المعلومات البنيوية في الملف | | Word (غير موسوم) | جيدة | أنماط منتظمة، وعمود واحد | | LaTeX | جيدة–متوسطة | منتظم لكن غير موسوم | | برنامج تصميم (تقرير) | متوسطة | غير موسوم، والتخطيط معقد | | برنامج تصميم (كتيّب) | رديئة | أعمدة متعددة، وصناديق، وتخطيط حر | | ممسوح + تعرف ضوئي | ضعيفة | طبقة نص مصطنعة | | ممسوح (بلا تعرف ضوئي) | مستحيلة | لا نص |

الخلاصة

إنتاج Markdown من PDF عمل يستخرج بنية دلالية من أوامر الرسم. وفي ملفات PDF الموسومة تكون هذه البنية موجودة في الملف أصلاً ويُختزَل التحويل إلى إسناد مباشر — فتكون النتيجة شبه خالية من الأخطاء. أما في ملفات PDF غير الموسومة فيضطر المحوّل إلى تخمين كل شيء من القرائن البصرية: تجميع أجزاء النص، وتحديد ترتيب القراءة، واستخراج مستوى العنوان من مقاس الخط، واكتشاف الجداول من المحاذاة. وتنجح هذه التخمينات في المستندات المنتظمة ذات العمود الواحد، وتضعف في المستندات متعددة الأعمدة وكثيفة التصميم. ولذلك من الصواب النظر إلى التحويل بوصفه نقطة بداية تتطلب تنظيفاً يدوياً لا نهايةً.

الأسئلة الشائعة

ما ملف PDF الموسوم (tagged)، وكيف أعرفه؟

ملف PDF الموسوم هو ملف يحمل إلى جانب محتوى الصفحة البنيةَ الدلالية للمستند: هذا عنوان، وهذه فقرة، وهذه خلية جدول، وترتيب القراءة كذا. ويوجد في نافذة خصائص المستند في عارضات PDF عادةً سطر «PDF موسوم: نعم/لا». وملفات PDF المنتَجة من Word مع تفعيل خيار «وسوم بنية المستند» موسومة.

لماذا يمثّل ترتيب القراءة مشكلة؟

لأن أجزاء النص في ملف PDF غير موسوم محفوظة بالترتيب الذي رُسمت به على الصفحة، وليس بالضرورة أن يكون هذا الترتيب هو ترتيب القراءة البصري. فقد يكون برنامج تصميم قد رسم كل العناوين أولاً ثم نص المتن. ويضطر المحوّل إلى تخمين ترتيب منطقي بالنظر إلى إحداثيات الأجزاء، وكثيراً ما يخيب هذا التخمين في التخطيطات متعددة الأعمدة.

ما القرائن التي ينظر إليها اكتشاف العناوين؟

مقاس الخط هو القرينة الأولى: فالأسطر الأكبر بوضوح من نص المتن مرشحة لأن تكون عناوين. كما تُقيَّم السماكة، وتغيّر عائلة الخط، وقصر السطر، والفراغ المتروك فوقه وتحته، والموضع في الصفحة، ونمط الترقيم (1.، و1.1.، و1.1.1.). ولا قرينة من هذه قاطعة؛ بل تكوّن مجتمعةً حساب احتمال.

لماذا يخرج Markdown ممتازاً من بعض ملفات PDF ورديئاً من غيرها؟

العامل الحاسم هو كيفية إنتاج ملف PDF. فتقرير أُنتج من Word موسوماً يحمل المعلومات البنيوية في الملف ويكون التحويل شبه خالٍ من الأخطاء. أما كتيّب خرج من برنامج تصميم متعدد الأعمدة وفيه صناديق فلا يحمل أي معلومات بنيوية ويضطر المحوّل إلى تخمين كل شيء من القرائن البصرية.

جرّب ذلك الآن باستخدام PDF → Markdown.

جرّب PDF → Markdown