মার্কডাউন হেডার টেক্সট স্প্লিটার
অনুপ্রেরণা
অনেক চ্যাট বা প্রশ্ন-উত্তর অ্যাপ্লিকেশন ইনপুট ডকুমেন্টগুলি এম্বেড এবং ভেক্টরাইজ করার আগে চাংকিং করা হয়। টেক্সট চাংকিং এর পরে, প্রয়োজন হয় টেক্সট ফ্রাগমেন্টগুলি একই ধরনের বিষয়বস্তু একত্রিত করা।
উদাহরণস্বরূপ, এমডিডাউন ফাইলটি বহু-স্তরের হেডিং দ্বারা সংগঠিত, সেইভাবে যেতে চান যেমন h1, h2, এবং h3। আমরা এমডিডাউন হেডিংগ ভিত্তিক ধরণানুযায়ী টেক্সট ফ্রাগমেন্ট কে শুন্য করা যায়।
এই অধ্যায়টি লঙ্গচেন কীভাবে এমডিডাউন হেডিং ভিত্তিক টেক্সট কন্টেন্ট বিভক্ত করে, এটি পরিচিত করার জন্য '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 হেডিং ভিত্তিক:
[("#", "হেডার 1"),("##", "হেডার 2")]
এমন কোন্টেন্ট বিভাজনের উদাহরন:
{'content': 'Hi this is Jim \nHi this is Joe', 'metadata': {'হেডার 1': 'Foo', 'হেডার 2': 'Bar'}}
{'content': 'Hi this is Molly', 'metadata': {'হেডার 1': 'Foo', 'হেডার 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] হচ্ছে একটি হালকা মার্কআপ ভাষা যা প্লেইন-টেক্সট এডিটর ব্যবহার করে ফর্ম্যাটেড টেক্সট তৈরি করার জন্য। জন গ্রুবার ২০০৪ সালে মার্কডাউনকে এমন একটি মার্কআপ ভাষা হিসেবে তৈরি করেছিলেন যা এর উৎস কোডের রূপে মানুষ পাঠকদের জন্য আকর্ষণীয়। [9] \n\n মার্কডাউনটি প্রসারিত হয়েছে ব্লগিং, তাত্ত্বিক মেসেজিং, অনলাইন ফোরাম, সহযোগী সফ্টওয়্যার, নথি পাতা এবং রিডমি ফাইলে ব্যবহার হচ্ছে। \n\n ## উদ্ভাবন এবং পৃথকতা \n\n মার্কডাউনের জনপ্রিয়তা এড়ায়, অনেক মার্কডাউন প্রযুক্তি উদ্ভাবন করা হয়, যা মূলত টেবিল, ফুটনোট, সংজ্ঞা তালিকা, [নোট ১] এবং এইচটিএমএল ব্লকে মার্কডাউন এর আন্ডার। \n\n #### মানকরণ \n\n ২০১২ সাল থেকে, জেফ অ্যাটউড এবং জন ম্যাকফারলেন সহ অনেক মানুষ, আমন্ত্রিত হলেন যেমন অ্যাটউড চিন্হিত করেছিলেন একটি মান করার প্রচেষ্টা শুরু করার জন্য। \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
Results:
[Document(page_content='মার্কডাউন[9] হচ্ছে একটি হালকা মার্কআপ ভাষা যা প্লেইন-টেক্সট এডিটর ব্যবহার করে ফর্ম্যাটেড টেক্সট তৈরি করার জন্য। জন গ্রুবার ২০০৪ সালে মার্কডাউনকে এমন একটি মার্কআপ ভাষা হিসেবে তৈরি করেছিলেন যা এর উৎস কোডের রূপে মানুষ পাঠকদের জন্য আকর্ষণীয়। [9]', metadata={'হেডার 1': 'পরিচিতি', 'হেডার 2': 'ইতিহাস'}),
Document(page_content='মার্কডাউনটি প্রসারিত হয়েছে ব্লগিং, তাত্ত্বিক মেসেজিং, অনলাইন ফোরাম, সহযোগী সফ্টওয়্যার, নথি পাতা এবং রিডমি ফাইলে ব্যবহার হচ্ছে।', metadata={'হেডার 1': 'পরিচিতি', 'হেডার 2': 'ইতিহাস'}),
Document(page_content='মার্কডাউনের জনপ্রিয়তা এড়ায়, অনেক মার্কডাউন প্রযুক্তি উদ্ভাবন করা হয়, যা মূলত টেবিল, ফুটনোট, সংজ্ঞা তালিকা, [নোট ১] এবং এইচটিএমএল ব্লকে মার্কডাউন এর আন্ডার।', metadata={'হেডার 1': 'পরিচিতি', 'হেডার 2': 'উদ্ভাবন এবং পৃথকতা'}),
Document(page_content='#### মানকরণ \n২০১২ সাল থেকে, জেফ অ্যাটউড এবং জন ম্যাকফারলেন সহ অনেক মানুষ, আমন্ত্রিত হলেন যেমন অ্যাটউড চিন্হিত করেছিলেন একটি মান করার প্রচেষ্টা শুরু করার জন্য।', metadata={'হেডার 1': 'পরিচিতি', 'হেডার 2': 'উদ্ভাবন এবং পৃথকতা'}),
Document(page_content='মার্কডাউনের ব্যবহারকারী এই ধরনের প্রোগ্রামিং ভাষার জন্য বিভিন্ন আনুষ্ঠান উপলব্ধ।', metadata={'হেডার 1': 'পরিচিতি', 'হেডার 2': 'অনুষ্ঠান'})]