مارک ڈاؤن ہیڈنگ ٹیکسٹ اسپلٹر
مقصد
بہت سے چیٹ یا سوال جواب کی ایپلیکیشنز میں دستاویزات کو داخل کرنے سے پہلے ان کو ٹکڑوں میں تقسیم کرنا اور ان کی بیک ٹرجئز کرنا ضروری ہوتا ہے۔ ٹیکسٹ ٹکڑوں کو ٹاپکسوں کی بنیاد پر ایک ہی موضوع کے ساتھ گروپ کرنا اکثر ضروری ہوتا ہے۔
مثال کے طور پر، ایک مارک ڈاؤن فائل کو مختلف سطحوں کے ہیڈنگز جیسے h1، h2، اور h3 کے ذریعے منظم کیا گیا ہے۔ ہم مارک ڈاؤن ہیڈنگز کی بنیاد پر ایک ہی سطح کے ٹیکسٹ ٹکڑے کو منظم کر سکتے ہیں۔
اس باب میں ہم یہ دیکھیں گے کہ کیسے LangChain مارک ڈاؤن ہیڈنگز کے بنیاد پر ٹیکسٹ مواد کو ٹکڑوں میں تقسیم کرتا ہے، اور اس میں MarkdownHeaderTextSplitter
ٹیکسٹ اسپلٹر شامل ہوتا ہے۔
مثال کے طور پر، اگر ہم اس مارک ڈاؤن کو تقسیم کرنا چاہتے ہیں:
md = '# Foo\\n\\n ## Bar\\n\\nHi, this is Jim \\nHi, this is Joe\\n\\n ## Baz\\n\\n Hi, this is Molly'
جس میں تقسیم کے لیے ہیڈنگ کی رولز مخفی کی جاتی ہیں، ایک سطح 1 اور ایک سطح 2 ہیڈنگ کے اس قواعد پر:
[("#", "Header 1"),("##", "Header 2")]
یہاں ایک مثال ہے کہ ہیڈنگز کی بنیاد پر مواد کو تقسیم کرنے والا مواد کیسے ہوگا، جہاں میٹا ڈیٹا فیلڈ ریکارڈ کر رہا ہے کہ موجودہ مواد کا ٹکڑا کس ہیڈنگ کا حصہ ہے۔
{'content': 'Hi, this is Jim \nHi, this is Joe', 'metadata': {'Header 1': 'Foo', 'Header 2': 'Bar'}}
{'content': 'Hi, this is Molly', 'metadata': {'Header 1': 'Foo', 'Header 2': 'Baz'}}
اب دیکھتے ہیں کہ کوڈ کیسے لکھا جاتا ہے۔
مضامین کی ترتیب کرنے کے لیے ہدایت:
%pip install -qU langchain-text-splitters
from langchain_text_splitters import MarkdownHeaderTextSplitter
API حوالہ:
- MarkdownHeaderTextSplitter کا استعمال کر کے ٹیکسٹ اسپلٹر تخلیق کریں
markdown_document = "# فو\n\n ## بار\n\nہی یہ جیم ہے\n\nہی یہ جو ہے\n\n ### بو \n\n ہی یہ لانس ہے \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='ہی یہ جیم ہے \nہی یہ جو ہے', metadata={'عنوان 1': 'فو', 'عنوان 2': 'بار'}),
Document(page_content='ہی یہ لانس ہے', metadata={'عنوان 1': 'فو', 'عنوان 2': 'بار', 'عنوان 3': 'بو'}),
Document(page_content='ہی یہ مولی ہے', metadata={'عنوان 1': 'فو', 'عنوان 2': 'باز'})]
type(md_header_splits[0])
langchain.schema.Document
ہر مارک ڈاؤن گروپ کے اندر، ہم کسی بھی ٹیکسٹ اسپلٹر لاگو کر سکتے ہیں۔
markdown_document = "# انٹرو \n\n ## تاریخ \n\n مارک ڈاؤن[9] ایک ہلکی مارک اپ زبان ہے جو ایک سادہ ٹیکسٹ ایڈیٹر کا استعمال کرکے فارمیٹ کردہ مواد بنانے کے لیے ہے۔ جان گروبر نے 2004 میں مارک ڈاؤن کو ایک ایسی مارک اپ زبان کی صورت میں پیش کیا جو اس کے سورس کوڈ فارم میں انسانی پڑھنے والوں کے محو اور کشش رکھتی ہے۔[9] \n\n مارک ڈاؤن بلاگنگ، فوری رسائی، آن لائن فورمز، تعاونی سافٹ ویئر، دستاویز پیجز، اور ریڈمی فائلز میں وسیع پیمانے پر استعمال ہوتا ہے۔ \n\n ## اضافہ اور اختلاف \n\n جبکہ مارک ڈاؤن کی لوکیت اضافہ تیزی سے بڑھتی گئی، بہت سے مارک ڈاؤن نفذ ہوگئے، جو زیادہ تر خصوصیات جیسے کہ ٹیبلز، فوٹ نوٹس، تعریف کی فہرستیں،[نوٹ 1] اور ایچ ٹی ایم ایل بلاکس میں مارک ڈاؤن کی درستگی کی ضرورت پر آئے۔ \n\n #### معیاری بنانا \n\n 2012 سے، ایک گروپ لوگ، جن میں جیف ایٹ وڈ اور جان میک فارلین شامل تھے، نے جو ایٹ وڈ نے معیاری بنانے کی کوشش کو ترغیب دینے والی قومی کوشش کا آغاز کیا۔ \n\n ## نفاذیں \n\n مارک ڈاؤن کے نفاذیں بارے میں معلومات کے 14 سے زائد پروگرامنگ لینگوئجز کے لیے دستیاب ہیں۔"
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='مارک ڈاؤن بلاگنگ، فوری رسائی، آن لائن فورمز، تعاونی سافٹ ویئر، دستاویز پیجز، اور ریڈمی فائلز میں وسیع پیمانے پر استعمال ہوتا ہے۔', metadata={'عنوان 1': 'انٹرو', 'عنوان 2': 'تاریخ'}),
Document(page_content='جبکہ مارک ڈاؤن کی لوکیت اضافہ تیزی سے بڑھتی گئی، بہت سے مارک ڈاؤن نفذ ہوگئے، جو زیادہ تر خصوصیات جیسے کہ ٹیبلز، فوٹ نوٹس، تعریف کی فہرستیں،[نوٹ 1] اور ایچ ٹی ایم ایل بلاکس میں مارک ڈاؤن کی درستگی کی ضرورت پر آئے۔ \n#### معیاری بنانا', metadata={'عنوان 1': 'انٹرو', 'عنوان 2': 'اضافہ اور اختلاف'}),
Document(page_content='#### معیاری بنانا \n2012 سے، ایک گروپ لوگ، جن میں جیف ایٹ وڈ اور جان میک فارلین شامل تھے، نے جو ایٹ وڈ نے معیاری بنانے کی کوشش کو ترغیب دینے والی قومی کوشش کا آغاز کیا۔', metadata={'عنوان 1': 'انٹرو', 'عنوان 2': 'اضافہ اور اختلاف'}),
Document(page_content='مارک ڈاؤن کے نفاذیں بارے میں معلومات کے 14 سے زائد پروگرامنگ لینگوئجز کے لیے دستیاب ہیں۔', metadata={'عنوان 1': 'انٹرو', 'عنوان 2': 'نفاذیں'})]