مقسم النصوص برؤوس Markdown

الحافز

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

على سبيل المثال، يتم تنظيم ملف Markdown برؤوس متعددة المستويات مثل h1 و h2 و h3. يمكننا تنظيم مقاطع النص ذات نفس العنوان استنادًا إلى رؤوس Markdown.

يقدم هذا الفصل كيفية تقسيم محتوى النص استنادًا إلى رؤوس Markdown باستخدام مقسم النصوص MarkdownHeaderTextSplitter.

على سبيل المثال، إذا أردنا تقسيم هذا Markdown:

md = '# القسم الأول\\n\\n ## القسم الثاني\\n\\nمرحبًا، إنه جيم  \\nمرحبًا، إنه جو'

حدد قواعد العناوين للتقسيم، استنادًا إلى رؤوس المستوى 1 والمستوى 2:

[("#", "العنوان 1"),("##", "العنوان 2")]

فيما يلي مثال على تقسيم المحتوى استنادًا إلى العناوين، حيث يسجل حقل البيانات الفرعي أي عنوان ينتمي إليه القطاع الحالي من المحتوى:

{'content': 'مرحبًا، إنه جيم  \nمرحبًا، إنه جو', 'metadata': {'العنوان 1': 'القسم الأول', 'العنوان 2': 'القسم الثاني'}}

دعونا الآن نرى كيفية كتابة الكود.

قم بتثبيت التبعيات:

%pip install -qU langchain-text-splitters
from langchain_text_splitters import MarkdownHeaderTextSplitter

مرجع الواجهة البرمجية:

  • إنشاء مقسم نصوص باستخدام MarkdownHeaderTextSplitter
markdown_document = "# مقدمة\n\n    ## تاريخ\n\nمارك داون[9] هو لغة ترميز بسيطة لإنشاء نصوص مقننة باستخدام محرر نص عادي. أنشأ جون غروبر مارك داون في عام 2004 كلغة ترميز جذابة للقراء البشر في شكل رموزها المصدرية.[9]\n\nمارك داون مستخدم على نطاق واسع في التدوين، والرسائل الفورية، والمنتديات على الإنترنت، والبرمجيات التعاونية، وصفحات الوثائق، وملفات readme.\n\n ## الارتفاع والتشعب\n\nمع تزايد شعبية مارك داون بسرعة، ظهرت العديد من تنفيذات مارك داون، بدرجة كبيرة بسبب الحاجة إلى\n\nميزات إضافية مثل الجداول، والهوامش، وقوائم التعريف، [مذكرة 1] ومارك داون داخل كتل HTML.\n\n #### التوحيد\n\nابتداءً من عام 2012، أطلق مجموعة من الأشخاص، بما في ذلك جيف أتوود وجون ماكفارلين، ما وصفه أتوود بجهد التوحيد.\n\n ## التنفيذات\n\nتتوفر تنفيذات مارك داون لأكثر من عشرين لغة برمجة."

headers_to_split_on = [
    ("#", "الرأس 1"),
    ("##", "الرأس 2"),
    ("###", "الرأس 3"),
]

markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
md_header_splits = markdown_splitter.split_text(markdown_document)
md_header_splits
[Document(page_content='مارك داون[9] هو لغة ترميز بسيطة لإنشاء نصوص مقننة باستخدام محرر نص عادي. أنشأ جون غروبر مارك داون في عام 2004 كلغة ترميز جذابة للقراء البشر في شكل رموزها المصدرية.[9]  \nمارك داون مستخدم على نطاق واسع في التدوين، والرسائل الفورية، والمنتديات على الإنترنت، والبرمجيات التعاونية، وصفحات الوثائق، وملفات readme.', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'تاريخ'}),
     Document(page_content='مع تزايد شعبية مارك داون بسرعة، ظهرت العديد من تنفيذات مارك داون، بدرجة كبيرة بسبب الحاجة إلى  \nميزات إضافية مثل الجداول، والهوامش، وقوائم التعريف، [مذكرة 1] ومارك داون داخل كتل HTML.  \n#### التوحيد', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'الارتفاع والتشعب'}),
     Document(page_content='#### التوحيد  \nابتداءً من عام 2012، أطلق مجموعة من الأشخاص، بما في ذلك جيف أتوود وجون ماكفارلين، ما وصفه أتوود بجهد التوحيد.', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'الارتفاع والتشعب'}),
     Document(page_content='تتوفر تنفيذات مارك داون لأكثر من عشرين لغة برمجة.', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'التنفيذات'})]
type(md_header_splits[0])
langchain.schema.Document

Dentro de cada grupo Markdown, podemos aplicar cualquier divisor de texto.

markdown_document = "# مقدمة\n\n    ## تاريخ\n\nمارك داون[9] هو لغة ترميز بسيطة لإنشاء نصوص مقننة باستخدام محرر نص عادي. أنشأ جون غروبر مارك داون في عام 2004 كلغة ترميز جذابة للقراء البشر في شكل رموزها المصدرية.[9]\n\nمارك داون مستخدم على نطاق واسع في التدوين، والرسائل الفورية، والمنتديات على الإنترنت، والبرمجيات التعاونية، وصفحات الوثائق، وملفات readme.\n\n ## الارتفاع والتشعب\n\nمع تزايد شعبية مارك داون بسرعة، ظهرت العديد من تنفيذات مارك داون، بدرجة كبيرة بسبب الحاجة إلى\n\nميزات إضافية مثل الجداول، والهوامش، وقوائم التعريف، [مذكرة 1] ومارك داون داخل كتل HTML.  \n#### التوحيد\n\nابتداءً من عام 2012، أطلق مجموعة من الأشخاص، بما في ذلك جيف أتوود وجون ماكفارلين، ما وصفه أتوود بجهد التوحيد.\n\n ## التنفيذات\n\nتتوفر تنفيذات مارك داون لأكثر من عشرين لغة برمجة."

headers_to_split_on = [
    ("#", "الرأس 1"),
    ("##", "الرأس 2"),
]

markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
md_header_splits = markdown_splitter.split_text(markdown_document)

from langchain.text_splitter import RecursiveCharacterTextSplitter

chunk_size = 250
chunk_overlap = 30
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=chunk_size, chunk_overlap=chunk_overlap
)

splits = text_splitter.split_documents(md_header_splits)
splits

النتائج:

[Document(page_content='مارك داون[9] هو لغة ترميز بسيطة لإنشاء نصوص مقننة باستخدام محرر نص عادي. أنشأ جون غروبر مارك داون في عام 2004 كلغة ترميز جذابة للقراء البشر في شكل رموزها المصدرية.[9]', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'تاريخ'}),
     Document(page_content='مارك داون مستخدم على نطاق واسع في التدوين، والرسائل الفورية، والمنتديات على الإنترنت، والبرمجيات التعاونية، وصفحات الوثائق، وملفات readme.', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'تاريخ'}),
     Document(page_content='مع تزايد شعبية مارك داون بسرعة، ظهرت العديد من تنفيذات مارك داون، بدرجة كبيرة بسبب الحاجة إلى  \nميزات إضافية مثل الجداول، والهوامش، وقوائم التعريف، [مذكرة 1] ومارك داون داخل كتل HTML.  \n#### التوحيد', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'الارتفاع والتشعب'}),
     Document(page_content='#### التوحيد  \nابتداءً من عام 2012، أطلق مجموعة من الأشخاص، بما في ذلك جيف أتوود وجون ماكفارلين، ما وصفه أتوود بجهد التوحيد.', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'الارتفاع والتشعب'}),
     Document(page_content='تتوفر تنفيذات مارك داون لأكثر من عشرين لغة برمجة.', metadata={'الرأس 1': 'مقدمة', 'الرأس 2': 'التنفيذات'})]