RAG: PDF to md
- File Python
- [pdf_to_rag_md.py]
- [requirements-pdf-to-rag-md.txt]
Skrip sudah diperiksa dengan `py_compile` dan diuji pada:
- PDF dengan bookmark dan struktur heading.
- PDF tanpa heading, menggunakan fallback setiap lima halaman.
- Instalasi
```bash mkdir -p ~/Apps/pdf-to-rag cd ~/Apps/pdf-to-rag
python3 -m venv .venv source .venv/bin/activate
pip install --upgrade pip pip install -r requirements-pdf-to-rag-md.txt ```
- Menjalankan
```bash python pdf_to_rag_md.py "Judul Buku.pdf" ```
Menentukan folder output:
```bash python pdf_to_rag_md.py "Judul Buku.pdf" \
--output-dir hasil-rag
```
Menambahkan tag metadata:
```bash python pdf_to_rag_md.py "Judul Buku.pdf" \
--tags "RAG,AI,LLM,dokumentasi"
```
Jika folder output sudah ada:
```bash python pdf_to_rag_md.py "Judul Buku.pdf" \
--overwrite
```
- Format filename
Untuk PDF yang memiliki heading:
```text Judul Buku 01 BAB 1 Pendahuluan.md Judul Buku 02 1.1 Latar Belakang.md Judul Buku 03 1.2 Tujuan.md Judul Buku 04 BAB 2 Metode.md ```
Jika PDF tidak memiliki heading, otomatis fallback per lima halaman:
```text Judul Buku 01 Bagian Halaman 1-5.md Judul Buku 02 Bagian Halaman 6-10.md Judul Buku 03 Bagian Halaman 11-15.md ```
Judul buku diambil secara berurutan dari:
1. Metadata title PDF. 2. Teks judul dengan font terbesar pada halaman awal. 3. Nama file PDF.
- Konten yang dibuang
Secara default, skrip membuang:
- Gambar dan blok nonteks.
- Caption `Gambar`, `Figure`, atau `Fig`.
- Baris `Sumber:` dan `Source:` pada caption.
- Nomor halaman.
- Header dan footer berulang.
- Footnote yang terdeteksi di bagian bawah halaman.
- Daftar isi.
- Daftar gambar dan daftar tabel.
- Daftar istilah dan glosarium.
- Daftar singkatan, simbol, dan nomenklatur.
- Indeks.
- Daftar pustaka, bibliography, dan references.
- Kata pengantar, prakata, dan foreword.
- Ucapan terima kasih.
- Tentang penulis.
- Halaman sampul dan copyright yang terdeteksi.
- Karakter tersembunyi, soft hyphen, dan spasi berlebihan.
- Metadata pada setiap file Markdown
Setiap file memiliki YAML front matter seperti:
```yaml --- schema_version: '1.0' document_id: pdf-914f553ce7c36f8704e4 topic_id: pdf-914f553ce7c36f8704e4-topic-0001 chunk_id: pdf-914f553ce7c36f8704e4-topic-0001
book_title: Buku Uji RAG title: BAB 1 Pendahuluan topic: BAB 1 Pendahuluan topic_index: 1
language: id tags:
- RAG - AI
source:
file: Buku Uji RAG.pdf sha256: 914f553ce7c36f8704e412b1fcb51b90 page_start: 3 page_end: 8 pages: - 3 - 4 - 5 - 6 - 7 - 8 trace: Buku Uji RAG.pdf#page=3-8 pdf_title: Buku Uji RAG pdf_author: Nama Penulis
rag:
unit: topic filename_pattern: Judul Buku 00 Topik.md topic_detection: pdf_toc word_count: 1450 character_count: 9860 content_sha256: 76a95b85fe3c9e48882c351138aa5f86 suggested_splitter: markdown_headers_then_token_window
extraction:
engine: PyMuPDF images: ignored figure_captions: removed junk_sections: removed standalone_page_number_filter: enabled footnote_filter: bottom_position_and_small_font
output_file: Buku Uji RAG 01 BAB 1 Pendahuluan.md generated_at: '2026-07-25T03:00:00+00:00' --- ```
Skrip juga menghasilkan:
```text manifest.json ```
Manifest berisi daftar semua topik, filename, rentang halaman, metode pendeteksian topik, hash dokumen, dan halaman nonkonten yang dibuang.
PDF hasil scan yang tidak memiliki selectable text harus menjalani OCR terlebih dahulu.