Memahami dan mengelola struktur file Markdown secara efisien dapat sangat penting dalam pekerjaan dokumen. Secara khusus, proses embedding teks dengan cara yang bermakna, dengan mempertimbangkan konteks dan struktur keseluruhan dokumen, dapat sangat membantu dalam menghasilkan representasi vektor yang komprehensif yang lebih baik dalam menangkap makna dan topik yang luas.
Dalam konteks ini, mungkin ada kalanya Anda ingin membagi konten file Markdown berdasarkan bagian tertentu, seperti header. Misalnya, Anda mungkin ingin membuat bagian informasi terkait, atau 'chunk', berdasarkan konten di bawah setiap header dalam dokumen. Pendekatan ini berupaya memanfaatkan elemen struktural dokumen secara efektif sambil mempertahankan konteks umum dalam teks.
Untuk menyelesaikan tugas seperti itu, Anda dapat menggunakan alat yang disebut MarkdownHeaderTextSplitter. Alat ini membagi dokumen sesuai dengan set header yang ditentukan, memungkinkan Anda untuk mengelola konten di bawah setiap grup header sebagai chunk terpisah. Dengan menggunakan metode ini, Anda dapat menangani konten secara lebih rinci sambil mempertahankan struktur keseluruhan dokumen, yang dapat berguna dalam berbagai proses pengolahan.
pip install -qU langchain-text-splitters
Gunakan MarkdownHeaderTextSplitter untuk membagi teks berformat Markdown berdasarkan header.
Fungsi ini membagi teks dalam dokumen Markdown berdasarkan header (#, ##, ###, dll.).
Variabel markdown_document dialokasikan untuk dokumen berformat Markdown.
Daftar headers_to_split_on mendefinisikan level header Markdown dan nama yang sesuai dalam bentuk tuple.
Objek markdown_splitter dibuat menggunakan kelas MarkdownHeaderTextSplitter, dan level header untuk pemisahan diteruskan sebagai parameter headers_to_split_on.
Metode split_text dipanggil untuk membagi markdown_document sesuai dengan level header.
from langchain_text_splitters import MarkdownHeaderTextSplitter# Definisikan dokumen berformat Markdown sebagai string.markdown_document = "# Title\n\n## 1. SubTitle\n\nHi this is Jim\n\nHi this is Joe\n\n### 1-1. Sub-SubTitle \n\nHi this is Lance \n\n## 2. Baz\n\nHi this is Molly"
print(markdown_document)
# Title
## 1. SubTitle
Hi this is Jim
Hi this is Joe
### 1-1. Sub-SubTitle
Hi this is Lance
## 2. Baz
Hi this is Molly
headers_to_split_on = [ # Definisikan level header dan nama mereka untuk membagi dokumen. ("#","Header 1", ),# Level header 1 diwakili oleh '#', dan dinamakan 'Header 1'. ("##","Header 2", ),# Level header 2 diwakili oleh '##', dan dinamakan 'Header 2'. ("###","Header 3", ),# Level header 3 diwakili oleh '###', dan dinamakan 'Header 3'.]# Buat objek MarkdownHeaderTextSplitter untuk membagi teks berdasarkan header Markdown.markdown_splitter =MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)# Bagi markdown_document berdasarkan header dan simpan hasilnya dalam md_header_splits.md_header_splits = markdown_splitter.split_text(markdown_document)# Cetak hasil pembagian.for header in md_header_splits:print(f"{header.page_content}")print(f"{header.metadata}", end="\n=====================\n")
Hi this is Jim
Hi this is Joe
{'Header 1': 'Title', 'Header 2': '1. SubTitle'}
=====================
Hi this is Lance
{'Header 1': 'Title', 'Header 2': '1. SubTitle', 'Header 3': '1-1. Sub-SubTitle'}
=====================
Hi this is Molly
{'Header 1': 'Title', 'Header 2': '2. Baz'}
=====================
Secara default, MarkdownHeaderTextSplitter menghapus header yang dipisah dari konten chunk output.
Ini dapat dinonaktifkan dengan mengatur strip_headers = False.
markdown_splitter =MarkdownHeaderTextSplitter(# Tentukan header untuk pemisahan. headers_to_split_on=headers_to_split_on,# Atur agar header tidak dihapus. strip_headers=False,)# Bagi dokumen Markdown berdasarkan header.md_header_splits = markdown_splitter.split_text(markdown_document)# Cetak hasil pemisahan.for header in md_header_splits:print(f"{header.page_content}")print(f"{header.metadata}", end="\n=====================\n")
# Title
## 1. SubTitle
Hi this is Jim
Hi this is Joe
{'Header 1': 'Title', 'Header 2': '1. SubTitle'}
=====================
### 1-1. Sub-SubTitle
Hi this is Lance
{'Header 1': 'Title', 'Header 2': '1. SubTitle', 'Header 3': '1-1. Sub-SubTitle'}
=====================
## 2. Baz
Hi this is Molly
{'Header 1': 'Title', 'Header 2': '2. Baz'}
=====================
Di dalam setiap grup Markdown, Anda dapat menerapkan text splitter yang diinginkan
from langchain_text_splitters import RecursiveCharacterTextSplittermarkdown_document = "# Intro \n\n## History \n\nMarkdown[9] adalah bahasa markup ringan untuk membuat teks berformat menggunakan editor teks biasa. John Gruber menciptakan Markdown pada tahun 2004 sebagai bahasa markup yang menarik bagi pembaca manusia dalam bentuk kode sumbernya.[9] \n\nMarkdown banyak digunakan dalam blogging, pesan instan, forum online, perangkat lunak kolaboratif, halaman dokumentasi, dan file readme. \n\n## Rise and divergence \n\nSeiring popularitas Markdown tumbuh dengan cepat, banyak implementasi Markdown muncul, sebagian besar didorong oleh kebutuhan untuk \n\nfitur tambahan seperti tabel, catatan kaki, daftar definisi,[catatan 1] dan Markdown di dalam blok HTML. \n\n#### Standardization \n\nMulai tahun 2012, sekelompok orang, termasuk Jeff Atwood dan John MacFarlane, meluncurkan apa yang Atwood karaktersasi sebagai upaya standarisasi. \n\n## Implementations \n\nImplementasi Markdown tersedia untuk lebih dari selusin bahasa pemrograman."
print(markdown_document)
# Intro
## History
Markdown[9] adalah bahasa markup ringan untuk membuat teks berformat menggunakan editor teks biasa. John Gruber menciptakan Markdown pada tahun 2004 sebagai bahasa markup yang menarik bagi pembaca manusia dalam bentuk kode sumbernya.[9]
Markdown banyak digunakan dalam blogging, pesan instan, forum online, perangkat lunak kolaboratif, halaman dokumentasi, dan file readme.
## Rise and divergence
Seiring popularitas Markdown tumbuh dengan cepat, banyak implementasi Markdown muncul, sebagian besar didorong oleh kebutuhan untuk
fitur tambahan seperti tabel, catatan kaki, daftar definisi,[catatan 1] dan Markdown di dalam blok HTML.
#### Standardization
Mulai tahun 2012, sekelompok orang, termasuk Jeff Atwood dan John MacFarlane, meluncurkan apa yang Atwood karaktersasi sebagai upaya standarisasi.
## Implementations
Implementasi Markdown tersedia untuk lebih dari selusin bahasa pemrograman
Pertama, gunakan MarkdownHeaderTextSplitter untuk membagi dokumen Markdown berdasarkan header.
headers_to_split_on = [ ("#","Header 1"),# Tentukan level header dan nama mereka untuk pemisahan. ("##","Header 2"),]# Bagi dokumen Markdown berdasarkan level header.markdown_splitter =MarkdownHeaderTextSplitter( headers_to_split_on=headers_to_split_on, strip_headers=False)md_header_splits = markdown_splitter.split_text(markdown_document)# Cetak hasil pemisahan.for header in md_header_splits:print(f"{header.page_content}")print(f"{header.metadata}", end="\n=====================\n")
# Intro
## History
Markdown[9] adalah bahasa markup ringan untuk membuat teks berformat menggunakan editor teks biasa. John Gruber menciptakan Markdown pada tahun 2004 sebagai bahasa markup yang menarik bagi pembaca manusia dalam bentuk kode sumbernya.[9]
Markdown banyak digunakan dalam blogging, pesan instan, forum online, perangkat lunak kolaboratif, halaman dokumentasi, dan file readme.
{'Header 1': 'Intro', 'Header 2': 'History'}
=====================
## Rise and divergence
Seiring popularitas Markdown tumbuh dengan cepat, banyak implementasi Markdown muncul, sebagian besar didorong oleh kebutuhan untuk
fitur tambahan seperti tabel, catatan kaki, daftar definisi,[catatan 1] dan Markdown di dalam blok HTML.
#### Standardization
Mulai tahun 2012, sekelompok orang, termasuk Jeff Atwood dan John MacFarlane, meluncurkan apa yang Atwood karaktersasi sebagai upaya standarisasi.
{'Header 1': 'Intro', 'Header 2': 'Rise and divergence'}
=====================
## Implementations
Implementasi Markdown tersedia untuk lebih dari selusin bahasa pemrograman.
{'Header 1': 'Intro', 'Header 2': 'Implementations'}
=====================
Bagilah hasil dari MarkdownHeaderTextSplitter sebelumnya menggunakan RecursiveCharacterTextSplitter sekali lagi
chunk_size =200# Tentukan ukuran chunk yang dihasilkan.chunk_overlap =20# Tentukan jumlah karakter yang tumpang tindih antar chunk.text_splitter =RecursiveCharacterTextSplitter( chunk_size=chunk_size, chunk_overlap=chunk_overlap)# Bagi dokumen menjadi chunk berbasis karakter.splits = text_splitter.split_documents(md_header_splits)# Cetak hasil pemisahan.for header in splits:print(f"{header.page_content}")print(f"{header.metadata}", end="\n=====================\n")
# Intro
## History
Markdown[9] adalah bahasa markup ringan untuk membuat teks berformat menggunakan editor teks biasa. John Gruber menciptakan Markdown pada tahun 2004 sebagai bahasa markup yang menarik bagi pembaca manusia dalam bentuk kode sumbernya.[9]
Markdown banyak digunakan dalam blogging, pesan instan, forum online, perangkat lunak kolaboratif, halaman dokumentasi, dan file readme.
{'Header 1': 'Intro', 'Header 2': 'History'}
=====================
## Rise and divergence
Seiring popularitas Markdown tumbuh dengan cepat, banyak implementasi Markdown muncul, sebagian besar didorong oleh kebutuhan untuk
fitur tambahan seperti tabel, catatan kaki, daftar definisi,[catatan 1] dan Markdown di dalam blok HTML.
#### Standardization
Mulai tahun 2012, sekelompok orang, termasuk Jeff Atwood dan John MacFarlane, meluncurkan apa yang Atwood karaktersasi sebagai upaya standarisasi.
{'Header 1': 'Intro', 'Header 2': 'Rise and divergence'}
=====================
## Implementations
Implementasi Markdown tersedia untuk lebih dari selusin bahasa pemrograman.
{'Header 1': 'Intro', 'Header 2': 'Implementations'}
=====================
# Intro
## History
{'Header 1': 'Intro', 'Header 2': 'History'}
=====================
Markdown[9] adalah bahasa markup ringan untuk membuat teks berformat menggunakan editor teks biasa. John Gruber menciptakan Markdown pada tahun 2004 sebagai bahasa markup yang menarik bagi pembaca
{'Header 1': 'Intro', 'Header 2': 'History'}
=====================
bagi pembaca manusia dalam bentuk kode sumbernya.[9]
{'Header 1': 'Intro', 'Header 2': 'History'}
=====================
Markdown banyak digunakan dalam blogging, pesan instan, forum online, perangkat lunak kolaboratif, halaman dokumentasi, dan file readme.
{'Header 1': 'Intro', 'Header 2': 'History'}
=====================
## Rise and divergence
Seiring popularitas Markdown tumbuh dengan cepat, banyak implementasi Markdown muncul, sebagian besar didorong oleh kebutuhan untuk
{'Header 1': 'Intro', 'Header 2': 'Rise and divergence'}
=====================
fitur tambahan seperti tabel, catatan kaki, daftar definisi,[catatan 1] dan Markdown di dalam blok HTML.
#### Standardization
{'Header 1': 'Intro', 'Header 2': 'Rise and divergence'}
=====================
Mulai tahun 2012, sekelompok orang, termasuk Jeff Atwood dan John MacFarlane, meluncurkan apa yang Atwood karaktersasi sebagai upaya standarisasi.
{'Header 1': 'Intro', 'Header 2': 'Rise and divergence'}
=====================
## Implementations
Implementasi Markdown tersedia untuk lebih dari selusin bahasa pemrograman.
{'Header 1': 'Intro', 'Header 2': 'Implementations'}
=====================