Sedang mengikuti modul ini?
Modul 14 · Halaman 15 daripada 20 · 9 bahagian
Document Loader dan Text Splitter
Cara dokumen dimuat ke dalam format piawai dan dipecah kepada chunk, loader dan splitter popular, dua contoh dan parameter splitter.
Apa itu Document Loader?
- Document Loader membantu memuatkan data daripada pelbagai sumber ke dalam format piawai (objek Document).
- Ia menyokong jenis fail seperti PDF, TXT, DOCX, CSV, HTML, JSON, halaman web, pangkalan data, dsb.
- Setiap dokumen yang dimuat mengandungi
page_content(teks) danmetadata(sumber, nombor halaman, dsb.). - Loader memudahkan integrasi data peribadi anda dengan aplikasi LLM.
Apa itu Text Splitter?
- Text Splitter membahagikan dokumen besar kepada chunk lebih kecil.
- LLM mempunyai had token, jadi pemecahan membantu memproses dokumen besar dengan cekap.
- Pelbagai splitter tersedia mengikut kes penggunaan (aksara, token, semantik, rekursif).
- Chunking yang betul meningkatkan ketepatan retrieval dan mengurangkan konteks tidak relevan.
- Anda juga boleh menetapkan saiz chunk, pertindihan dan peraturan pemecahan tersuai.
Aliran Pemuatan dan Pemecahan Dokumen
Sumber DataPDF, TXT / DOCX, web, pangkalan data
Document LoaderMuat ke LangChain
Objek Documentpage_content + metadata
Text SplitterPecah kepada chunk
Chunk DokumenChunk 1 ... Chunk N
Document Loader Popular dalam LangChain
| Loader | Sumber Disokong | Kes Penggunaan |
|---|---|---|
| PyPDFLoader | Fail PDF | Muat dokumen PDF |
| TextLoader | Fail teks (.txt) | Dokumen teks mudah |
| Docx2txtLoader | Dokumen Word (.docx) | Muat fail Word |
| CSVLoader | Fail CSV | Data berstruktur daripada CSV |
| WebBaseLoader | Halaman web (URL) | Muat data daripada laman web |
| DirectoryLoader | Berbilang fail dalam folder | Muat dokumen secara kelompok |
| JSONLoader | Fail JSON | Muat data JSON berstruktur |
| UnstructuredLoader | Pelbagai format (PDF, HTML, dsb.) | Loader lanjutan menggunakan unstructured |
Text Splitter Popular dalam LangChain
| Splitter | Penerangan | Kes Penggunaan |
|---|---|---|
| CharacterTextSplitter | Pecah mengikut bilangan aksara | Mudah dan pantas |
| RecursiveCharacterTextSplitter | Pecah secara rekursif mengikut aksara, ayat dan pemisah lain | Paling kerap digunakan |
| TokenTextSplitter | Pecah mengikut token (cth. menggunakan tiktoken) | Apabila mahu chunk berasaskan token |
| SentenceTransformersTokenTextSplitter | Pecah menggunakan sentence transformers | Chunking semantik |
| MarkdownHeaderTextSplitter | Pecah berdasarkan pengepala markdown | Dokumen dengan pengepala (cth. dokumentasi) |
| SemanticChunker | Pecah menggunakan persamaan semantik | Pemeliharaan konteks lebih baik |
Contoh 1: Muat PDF dan Pecah dengan RecursiveCharacterTextSplitter
python
from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter # 1. Load PDF document loader = PyPDFLoader("data/company_policy.pdf") docs = loader.load() print(f"Total pages: {len(docs)}") # 2. Split documents into chunks splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, separators=["\n\n", "\n", " ", ""] ) splits = splitter.split_documents(docs) print(f"Total chunks: {len(splits)}") # 3. Check a chunk print(docs[0].page_content[:200]) print(splits[0].page_content) print(splits[0].metadata)
Contoh 2: Muat Halaman Web dan Pecah
python
from langchain_community.document_loaders import WebBaseLoader from langchain_text_splitters import CharacterTextSplitter # 1. Load web pages loader = WebBaseLoader(["https://example.com/docs"]) docs = loader.load() print(f"Loaded {len(docs)} documents") # 2. Split into chunks splitter = CharacterTextSplitter( chunk_size=500, chunk_overlap=50 ) splits = splitter.split_documents(docs) print(f"Total chunks: {len(splits)}") # 3. View chunk print(splits[0].page_content) print(splits[0].metadata)
Parameter Berguna untuk Text Splitter
| Parameter | Penerangan | Contoh |
|---|---|---|
| chunk_size | Saiz setiap chunk (dalam aksara/token) | 1000 |
| chunk_overlap | Pertindihan antara chunk | 200 |
| separators | Senarai pemisah untuk memecah teks | ["\n\n", "\n", ""] |
| length_function | Fungsi untuk mengira panjang (len atau tiktoken) | len |
| keep_separator | Kekalkan pemisah dalam chunk | True / False |
Pengajaran Utama
- Document loader membantu memuatkan data daripada pelbagai sumber.
- Text splitter membahagikan dokumen besar kepada chunk lebih kecil.
- Gunakan loader yang sesuai mengikut sumber data anda.
- RecursiveCharacterTextSplitter paling kerap digunakan.
- Saiz chunk dan pertindihan yang betul meningkatkan ketepatan retrieval.
- Pecahkan dokumen sebelum mencipta embeddings.
- Sokongan untuk PDF, Word, web, CSV, JSON dan lain-lain.
- Penting untuk membina aplikasi RAG dan sistem pengetahuan.