استراتيجيات تقسيم النص (ثابت، جُملي، دلالي)
تعرّف على المفاضلات بين التقسيم ذي الحجم الثابت، والتقسيم المراعي للجمل، والتقسيم الدلالي لتحسين جودة الاسترجاع.
استراتيجيات تقسيم النص (ثابت، جُملي، دلالي) درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.
لماذا نقسّم إلى مقاطع؟
لا يمكنكم إنشاء تضمين لملف PDF كامل من 200 صفحة باعتباره متجهًا واحدًا — فسيكون المتجه مجردًا أكثر من اللازم لمطابقة استعلامات محددة. لذلك تقسّمون المستند إلى أجزاء أصغر (يتراوح حجم كل منها بين 200 و800 رمز تقريبًا)، وتنشئون تضمينًا لكل جزء، ثم تبحثون على مستوى المقطع.
التقسيم إلى مقاطع ذات حجم ثابت
أبسط نهج — تقسيم كل N من الأحرف أو الرموز:
def fixed_chunks(text, chunk_size=1000, overlap=200):
chunks = []
i = 0
while i < len(text):
chunks.append(text[i:i + chunk_size])
i += chunk_size - overlap
return chunks
sample_text = "A" * 2500
chunks = fixed_chunks(sample_text, chunk_size=1000, overlap=200)
print(f"Split {len(sample_text)} characters into {len(chunks)} chunks")
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {len(c)} chars")
لماذا نستخدم التداخل؟
يضمن التداخل (عادةً ما يعادل 10-20% من حجم المقطع) ظهور الجملة التي تمتد عبر الحد الفاصل كاملةً في مقطع واحد على الأقل. ومن دونه، قد لا يكون من الممكن استرجاع حقيقة مهمة قُسّمت بين مقطعين.
التقسيم المستند إلى الجمل
قسّموا عند حدود الجمل — ولا تقطعوا الجملة أبدًا:
import re
def sentence_chunks(text, max_chars=1000):
sentences = re.split(r'(?<=[.!?])\s+', text)
chunks = []
current = ''
for s in sentences:
if len(current) + len(s) > max_chars and current:
chunks.append(current.strip())
current = s
else:
current += ' ' + s
if current:
chunks.append(current.strip())
return chunks
sample_text = "This is sentence one. This is sentence two! Is this sentence three? Yes it is."
chunks = sentence_chunks(sample_text, max_chars=40)
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {c!r}")
التقسيم التكراري (LangChain)
يحاول RecursiveCharacterTextSplitter في LangChain التقسيم عند حدود الفقرات أولًا، ثم الجمل، ثم الكلمات — مع الحفاظ على البنية قدر الإمكان.
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100,
separators=['\n\n', '\n', '. ', ' ']
)
chunks = splitter.split_text(document)التقسيم الدلالي
قسّموا عند تغيّر الموضوع. تنشئ التطبيقات تضمينًا لكل جملة، ثم تقسّم حيث تكون تضمينات الجمل المتتالية متباعدة بدرجة كبيرة.
يستغرق حسابه وقتًا أطول، لكنه ينتج مقاطع متماسكة موضوعيًا.
التقسيم المدرك لـ Markdown
بالنسبة إلى مستندات Markdown، قسّموا عند حدود العناوين للحفاظ على الأقسام معًا. يرث كل مقطع عناوينه الأصلية باعتبارها سياقًا.
التقسيم المدرك للشيفرة
بالنسبة إلى الشيفرة المصدرية، قسّموا عند حدود الدوال والفئات، لا عند عدد الأحرف. تمنحكم أدوات مثل tree-sitter تقسيمًا مدركًا لـ AST.
اختيار حجم المقطع
الموازنة بين الإيجابيات والسلبيات:
- المقاطع الصغيرة (~200 رمز) — مطابقات دقيقة، لكن عدد أكبر من المقاطع لإدارتها
- المقاطع الكبيرة (~1000 رمز) — سياق أكبر لكل مطابقة، لكنها أقل دقة
الافتراضي: 500-800 رمز مع تداخل بنسبة 10-20%.
الحفاظ على البيانات الوصفية
أرفقوا بيانات وصفية بكل مقطع:
- عنوان URL للمصدر / مسار الملف
- رقم الصفحة
- عنوان المستند
- القسم / العنوان
- الطوابع الزمنية للإنشاء / التحديث
يفيد ذلك في التصفية والاستشهادات وإعادة الترتيب.
المقاطع ذات السياق
تقنية حديثة: أضيفوا إلى بداية كل مقطع سياقًا من سطر واحد ينشئه LLM (مثل: "هذا المقطع من التقرير المالي للشركة للربع الثاني من عام 2024، ويتناول الإيرادات."). يحسّن ذلك الاسترجاع بنسبة 30-50%.
مقاطع الأصل والتابع
فهرسوا المقاطع الصغيرة للحصول على مطابقات دقيقة، لكن استرجعوا فقرة الأصل الأكبر الخاصة بها لتوفير السياق:
- أنشئوا تضمينات لمقاطع على مستوى الجملة
- عند حدوث مطابقة، أعيدوا المقطع الأصل المكوّن من 800 رمز
لماذا نستخدم التداخل؟
لماذا تتداخل المقاطع عادةً بنسبة 10-20%؟
مراجعة
ابدؤوا بالتقسيم التكراري للأحرف عند نحو 800 رمز، مع تداخل بنسبة 10%. أضيفوا الوعي الدلالي أو البنيوي مع توسّع احتياجاتكم.
الأسئلة الشائعة
هل درس «استراتيجيات تقسيم النص (ثابت، جُملي، دلالي)» مجاني؟
نعم — نص درس «استراتيجيات تقسيم النص (ثابت، جُملي، دلالي)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.
ماذا ستتعلم في «استراتيجيات تقسيم النص (ثابت، جُملي، دلالي)»؟
تعرّف على المفاضلات بين التقسيم ذي الحجم الثابت، والتقسيم المراعي للجمل، والتقسيم الدلالي لتحسين جودة الاسترجاع. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟
لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «استراتيجيات تقسيم النص (ثابت، جُملي، دلالي)»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟
نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما الذي يحله RAG (حدود المعرفة والهلوسة)
- استراتيجيات تقسيم النص (ثابت، جُملي، دلالي)
- فهرسة مجموعة مستندات
- بناء RAG بسيط باستخدام FAISS أو Chroma