استخراج الجداول من نص PDF
صفحة قيمها مصفوفة بعلامات الجدولة، مثل Cable و25 و1.20، تتحول إلى جدول من ثلاثة أعمدة مسماة وثلاثة صفوف بيانات. أما الفقرة التي لا أعمدة فيها فتُرفض بدل أن تُحشر في جدول زائف. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
إنها الخطوة الحتمية بين استخراج النص من ملف PDF والاستفادة الفعلية من الأرقام التي يحتويها، من دون التعرف الضوئي على الحروف (OCR) ومن دون تخمينات الذكاء الاصطناعي.
من نص PDF الخام إلى جدول منظم
عندما يعالج مستخرج النصوص صفحة PDF، تعود الجداول على شكل أسطر نصية مسطحة. لا يزال الإنسان يرى الأعمدة لأن القيم متناسقة — مفصولة بعلامات جدولة أو بفجوات من مسافتين أو أكثر — لكن البرنامج لا يراها. تسد هذه القدرة تلك الفجوة.
ترسل الأسطر الخام للصفحة ويجد النظام الأعمدة المحاذاة: يُقسَّم كل سطر عند الفاصل المكتشف، ويُعتمد عدد الأعمدة المتكرر بين الأسطر شكلًا للجدول، ويُقطَّع كل سطر إلى خلايا. يصبح الصف الأول ترويسة افتراضيًا، فيكون الناتج مصفوفة columns مسماة إضافة إلى مصفوفة rows للبيانات، جاهزة للتحويل إلى كائنات أو للتحميل في إطار بيانات. كل شيء حتمي — النص نفسه ينتج الجدول نفسه دائمًا — مما يجعلها آمنة في خط أنابيب مؤتمت حيث يُدخل التعرف الضوئي أو نموذج الرؤية تباينًا صامتًا.
كيف يعمل التحليل فعليًا
أولًا، تُستبعد الأسطر الفارغة ويُقسَّم كل سطر متبقٍ إلى خلايا. في وضع auto يستخدم المحلل علامات الجدولة عندما يحتوي أي سطر على واحدة، وإلا يلجأ إلى تسلسلات من مسافتين أو أكثر — ويمكنك أيضًا فرض أي من الاستراتيجيتين باستخدام المعامل delimiter. لا تُعد مرشحة للجدول إلا الأسطر التي تنتج خليتين على الأقل.
ومن بينها يبحث المحلل عن عدد الأعمدة المتكرر: القيمة المنوالة للتوزيع. الجدول الحقيقي هو مجموعة أسطر تتفق على عدد أعمدتها، لذا تُوضع جانبًا الأسطر ذات العدد المختلف — فقرة ملتفة أو تذييل شارد. إذا لم يتكرر أي عدد مرتين على الأقل، أو وُجد أقل من سطرين مرشحين، يُرفض الإدخال: لا يوجد جدول ليُعثر عليه.
عطّله للبيانات بلا ترويسة فتُطبَّق الأسماء الاصطناعية على جميع الصفوف.
أين تندرج وما ليست عليه
وكن واضحًا بشأن ما ليست عليه. لا تقرأ ملف PDF نفسه — بل تعمل على نص استخرجته أنت مسبقًا. ولا تعالج الصفحات الممسوحة ضوئيًا لأنها لا تحتوي على طبقة نصية؛ فلصور الجداول تحتاج قدرة قائمة على التعرف الضوئي.
وتتوقع أعمدة محاذاة لا نثرًا: فالنص المتصل يُرفض بدلًا من تشويهه إلى جدول زائف.
حالات الاستخدام
أتمتة خط أنابيب استيعاب التقارير
شغّل المحلل بعد مستخرج النصوص في كل صفحة وحمّل فقط الصفحات التي تحتوي على جداول؛ أما الباقي فيُرفض بنظافة ولا يُحتسب.
الأسئلة الشائعة
هل تقرأ ملف PDF مباشرة؟
لا. إنها تحلل طبقة النص الخام لصفحة واحدة تقدمها أنت. استخرج النص أولًا بمستخرج نصوص PDF ثم أرسل الأسطر هنا.
ما فواصل الأعمدة المدعومة؟
علامات الجدولة أو تسلسلات من مسافتين أو أكثر. يكتشف الوضع التلقائي ما تستخدمه الصفحة؛ ويمكنك أيضًا فرض الجدولة أو المسافات باستخدام المعامل delimiter.
ماذا يحدث عندما لا يحتوي النص على جدول؟
تُرفض الاستدعاءات غير الصالحة قبل الفوترة، فلا تكلف شيئًا.
هل تعمل مع ملفات PDF الممسوحة ضوئيًا؟
لا. المسح الضوئي صورة ولا طبقة نصية فيه لتحليلها. استخدم مستخرج جداول بالتعرف الضوئي للمستندات الممسوحة؛ هذه القدرة مخصصة لملفات PDF الرقمية ذات النص القابل للتحديد.
هل يُخزَّن مستندي؟
لا. يُعالَج النص في الذاكرة ويُتخلص منه؛ ولا يُعاد إلا الجدول المحلَّل.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/pdf/extract-tables \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"}'const res = await fetch("https://api.kit.forhosting.com/pdf/extract-tables", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/extract-tables",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/extract-tables", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Item\\tQty\\tUnit price\\nWidget\\t12\\t9.99\\nGadget\\t3\\t24.50"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/extract-tables", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "Item\tQty\tUnit price\nWidget\t12\t9.99\nGadget\t3\t24.50"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.extract_tables",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 1 |
max_lines | 5000 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تأخذ واجهة برمجة التطبيقات لاستخراج الجداول من نص PDF طبقة النص الخام لصفحة PDF — الأسطر التي يعيدها مستخرج النصوص، حيث تكون الأعمدة محاذاة بعلامات الجدولة أو بتسلسلات من المسافات — وتحوّلها إلى جدول منظم ونظيف: أسماء الأعمدة وصفوف البيانات والأعداد، بصيغة JSON جاهزة لجدول بيانات أو لاستيراد إلى قاعدة بيانات أو لنص برمجي.
من نص PDF الخام إلى جدول منظم
وإذا لم تحتوِ الصفحة على أعمدة محاذاة، يفشل الاستدعاء بخطأ invalid_input واضح بدلًا من اختلاق جدول، ولا تُحتسب الاستدعاءات الفاشلة.
كيف يعمل التحليل فعليًا
عند تفعيل has_header، يسمي الصف الأول من الجدول الأعمدة؛ وتُستبدل خلايا الترويسة الفارغة أو المكررة بـ col_1 وcol_2 وهكذا، بحيث يكون كل اسم عمود في الناتج قابلًا للاستخدام.
أين تندرج وما ليست عليه
استخدمها كمرحلة ثانية في خط أنابيب بيانات PDF: استخرج طبقة النص بمستخرج نصوص، واستدعِ نقطة النهاية هذه في كل صفحة تحتوي على جدول، ثم حمّل الصفوف الناتجة حيث ينبغي. ولأن التحليل معالجة نصية خالصة، يعمل على الحافة خلال أجزاء من الثانية، ويكلف $0.002 لكل استدعاء، ويعمل الكود نفسه مجانًا في متصفحك في هذه الصفحة، فيمكنك اختبار نص صفحة بلصقه قبل أتمتة أي شيء. وهي مفيدة أيضًا للمهام العابرة: الصق نص صفحة تقرير، واحصل على JSON، ثم حوّله إلى CSV في خطوة إضافية.
حالات التكامل
استرجاع قائمة أسعار من صفحة PDF
استخرج نص الصفحة وأرسله لتحصل على أعمدة الصنف والكمية والسعر كصفوف JSON جاهزة للاستيراد إلى جدول بيانات.
تحويل تفريغ بيانات بلا ترويسة
أوقف كشف الترويسة باستخدام has_header=false لتحصل على أسماء ثابتة col_1..col_n لكل صف في قائمة محاذاة بالمسافات.
أسئلة تقنية
كم تبلغ التكلفة؟
$0.002 لكل استدعاء. ويعمل المحلل نفسه مجانًا في متصفحك في هذه الصفحة، فلا تدفع إلا عند أتمتته عبر واجهة API.