استخراج نص PDF من نطاق محدد من الصفحات
يمكنكم استخراج نص PDF من نطاق صفحات عندما يتوفر لديكم مسبقًا مقطع نصي لكل صفحة ولا تحتاجون إلا إلى قسم محدد.
شغّل الأداة مجانًا
قدموا مقاطع الصفحات بالترتيب مع رقم الصفحة الأولى والأخيرة. تتحقق الإمكانية من النطاق المرقم ابتداءً من واحد مقارنة بعدد الصفحات الكامل، وتشمل الحدين، ثم تجمع النص المختار بالترتيب مع علامة مرئية لفاصل الصفحات. وهي مناسبة للتقارير والعقود والأدلة وغيرها من المستندات الطويلة التي ينبغي أن تستقبل المرحلة التالية منها مقتطفًا مركزًا بدلًا من المحتوى كله.
قدموا نص الصفحات مرتبًا ونطاقًا شاملًا للحدين
ابدؤوا بالنص الذي أنشأه مستخرج PDF أو إجراء OCR لكل صفحة. ضعوا الكائنات بالترتيب نفسه الوارد في المستند الأصلي، وأبقوا الصفحات التي يكون نصها المستخرج سلسلة فارغة. بعد ذلك عينوا start_page وend_page بأرقام تبدأ من واحد. يدخل الحدان في النتيجة؛ فالنطاق من 3 إلى 5 يعيد المقاطع الثالث والرابع والخامس. من الضروري إبقاء الصفحات الفارغة لأن حذفها يغير أرقام كل الصفحات التالية. يجب أن تكون كل صفحة كائنًا يحتوي سلسلة text، وتُرفض القيم المفقودة أو الأنواع الأخرى. تقبل المدخلات حتى عشرة آلاف مقطع. لا تفتح هذه الإمكانية ملف PDF ولا تفك ترميزه، بل تتعامل مع نص كل صفحة بعد استخراجه في خطوة سابقة، وبذلك تبقى عملية الاختيار صريحة ومتوقعة وسهلة المراجعة.
افهموا التحقق من النطاق وحدود الصفحات
تبدأ أرقام الصفحات من واحد، ويشمل النطاق حديه، ويخضع لتحقق صارم. يجب أن يكون رقما البداية والنهاية عددين صحيحين لا يقلان عن واحد، ولا يجوز أن تأتي البداية بعد النهاية. كذلك لا يجوز لأي حد أن يتجاوز عدد مقاطع الصفحات المقدمة. إذا كان المستند من ثلاث صفحات وانتهى النطاق عند الصفحة 4، يعيد الطلب خطأ إدخال غير صالح بدلًا من نتيجة جزئية. يكشف ذلك أي اختلاف بين بيانات المستند والاختيار ونتيجة الاستخراج. تُجمع السلاسل المختارة بعلامة ثابتة تحيط بها أسطر فارغة من دون قص النص أو تفسيره. لا تظهر العلامة عند اختيار صفحة واحدة لعدم وجود فاصل. ويذكر الناتج عدد الصفحات المختارة ويكرر الحدين المقبولين. لا تستخدم العملية الشبكة أو العشوائية أو الساعة أو نماذج اللغة أو الاستدلال، لذلك تنتج المدخلات المتطابقة مخرجات متطابقة دائمًا.
استخدموا الناتج في مسارات مستندات محددة الهدف
يفيد الاختيار الانتقائي خصوصًا بين مرحلة استخراج تحافظ على الصفحات وجهة لاحقة لا ينبغي أن تستقبل المستند كاملًا. يمكن لمسار العقود عزل الملاحق قبل تحليل البنود، ولمسار مالي الاحتفاظ بقسم مناقشة الإدارة فقط، ولنظام دعم فهرسة فصل من دليل طويل. ولأن المدخل نص وليس ملف PDF ثنائيًا، يمكن دمج الإمكانية مع OCR للملفات الممسوحة أو مع الاستخراج العادي للملفات الرقمية. احتفظوا بالمصفوفة الأصلية حتى يتم التحقق من النطاق، وسجلوا حدي البداية والنهاية المعادين عندما تكون قابلية التدقيق مهمة. يمكن إبقاء علامة فاصل الصفحات للاستشهادات أو تقسيم النص عندها لاحقًا. لا تلخص الأداة المحتوى ولا تصححه أو تصنفه أو تطبعه؛ فهذه التحويلات تنتمي إلى خطوات منفصلة، بينما تظل هذه العملية أداة حتمية قابلة لإعادة الإنتاج من أجل توجيه النص بدقة وأتمتة المستندات.
حالات الاستخدام
اعزلوا قسمًا من تقرير
اختاروا الصفحات التي تضم مناقشة الإدارة قبل إرسال النص إلى مرحلة التحليل أو المقارنة.
وجهوا ملاحق العقود
استخرجوا النطاق الشامل للحدين الذي يحتوي الملحق، مع حفظ فواصل الصفحات للمراجعة.
افهرسوا فصلًا من دليل
اختاروا فصلًا من النص المقسم حسب الصفحات وأرسلوا الناتج المركز إلى البحث أو الدعم.
الأسئلة الشائعة
هل تدخل صفحتا البداية والنهاية في الناتج؟
نعم. النطاق شامل للحدين، ولذلك تعيد الصفحات من 2 إلى 4 ثلاثة مقاطع نصية.
ماذا يحدث إذا تجاوز النطاق المستند؟
يعيد الطلب خطأ إدخال غير صالح إذا تجاوز أي من الحدين عدد الصفحات المقدمة.
هل تقرأ هذه الإمكانية ملف PDF؟
لا. فهي تستقبل نصًا مرتبًا حسب الصفحات سبق استخراجه من ملف PDF.
كيف تُفصل الصفحات المختارة؟
تُجمع سلاسل الصفحات المتجاورة بعلامة ثابتة لفاصل الصفحات تحيط بها أسطر فارغة.
ما تكلفة الطلب الواحد؟
سعر API هو $0.002 لكل طلب. ويتاح التنفيذ الحتمي مجانًا في المتصفح على صفحة الإمكانية.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/pdf/text-extract-by-page-range \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"pages":[{"text":"Cover page"},{"text":"Executive summary\nRevenue increased."},{"text":"Risk analysis\nSupply remains constrained."},{"text":"Appendix"}],"start_page":2,"end_page":3}'const res = await fetch("https://api.kit.forhosting.com/pdf/text-extract-by-page-range", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"pages": [
{
"text": "Cover page"
},
{
"text": "Executive summary\nRevenue increased."
},
{
"text": "Risk analysis\nSupply remains constrained."
},
{
"text": "Appendix"
}
],
"start_page": 2,
"end_page": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/pdf/text-extract-by-page-range",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"pages": [
{
"text": "Cover page"
},
{
"text": "Executive summary\nRevenue increased."
},
{
"text": "Risk analysis\nSupply remains constrained."
},
{
"text": "Appendix"
}
],
"start_page": 2,
"end_page": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/pdf/text-extract-by-page-range", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"pages":[{"text":"Cover page"},{"text":"Executive summary\\nRevenue increased."},{"text":"Risk analysis\\nSupply remains constrained."},{"text":"Appendix"}],"start_page":2,"end_page":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"pages":[{"text":"Cover page"},{"text":"Executive summary\nRevenue increased."},{"text":"Risk analysis\nSupply remains constrained."},{"text":"Appendix"}],"start_page":2,"end_page":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/pdf/text-extract-by-page-range", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"pages": [
{
"text": "Cover page"
},
{
"text": "Executive summary\nRevenue increased."
},
{
"text": "Risk analysis\nSupply remains constrained."
},
{
"text": "Appendix"
}
],
"start_page": 2,
"end_page": 3
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "pdf.text_extract_by_page_range",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 25 |
max_pages | 200 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |