JSON pemecah ini menghasilkan potongan-potongan JSON yang lebih kecil dengan menjelajahi data JSON menggunakan penelusuran mendalam (depth-first traversal).
Pemecah ini berusaha untuk mempertahankan objek JSON yang bersarang sebanyak mungkin, tetapi jika diperlukan untuk menjaga ukuran potongan antara min_chunk_size dan max_chunk_size, objek tersebut akan dipisahkan. Jika nilainya adalah string yang sangat besar dan bukan JSON yang bersarang, string tersebut tidak akan dibagi.
Jika ada kebutuhan untuk batasan ketat pada ukuran potongan, Anda dapat mempertimbangkan untuk menggunakan Recursive Text Splitter setelah pemecah ini untuk memproses potongan-potongan tersebut.
Kriteria untuk Memecah
Cara Pemecahan Teks(Text Splitting Method): Berdasarkan Nilai JSON
Cara Pengukuran Ukuran Potongan(Chunk Size Measurement Method): Berdasarkan Jumlah Karakter
Data JSON yang diambil kemudian diubah menjadi bentuk dictionary Python menggunakan metode json() dan disimpan dalam variabel json_data.
import requests# Memuat data JSON.json_data = requests.get("https://api.smith.langchain.com/openapi.json").json()
Ini adalah contoh penggunaan RecursiveJsonSplitter untuk memecah data JSON.
from langchain_text_splitters import RecursiveJsonSplitter# Membuat objek RecursiveJsonSplitter yang membagi data JSON menjadi chunk dengan ukuran maksimal 300.splitter =RecursiveJsonSplitter(max_chunk_size=300)
Menggunakan fungsi splitter.split_json() untuk membagi data JSON secara rekursif.
# Membagi data JSON secara rekursif. Digunakan saat perlu mengakses atau memanipulasi potongan-potongan kecil JSON.json_chunks = splitter.split_json(json_data=json_data)
Gunakan metode splitter.create_documents() untuk mengonversi data JSON ke dalam format dokumen.
Gunakan metode splitter.split_text() untuk membagi data JSON menjadi daftar string
# Membuat dokumen berdasarkan data JSON.docs = splitter.create_documents(texts=[json_data])# Membuat potongan string berdasarkan data JSON.texts = splitter.split_text(json_data=json_data)# Mencetak string pertama.print(docs[0].page_content)print("==="*20)# Mencetak potongan string yang dibagi.print(texts[0])
Dengan memeriksa texts[2] untuk memeriksa salah satu potongan yang besar, kita dapat memastikan bahwa potongan tersebut berisi objek daftar (list).
Alasan mengapa ukuran potongan ke-2 melebihi batas (300) adalah karena potongan tersebut berisi objek list.
Ini karena RecursiveJsonSplitter tidak membagi objek daftar.
# Mari kita periksa ukuran setiap chunk.print([len(text) for text in texts][:10])# Jika kita meninjau salah satu chunk yang lebih besar, kita dapat melihat bahwa itu berisi objek daftar (list).print(texts[1])
Anda dapat mengonversi daftar dalam JSON menjadi pasangan key dalam bentuk index dengan mengatur parameter convert_lists menjadi True.
# Berikut adalah kode untuk memproses JSON dan mengonversi daftar menjadi kamus di mana pasangan index:item menjadi pasangan key:value.
texts = splitter.split_text(json_data=json_data, convert_lists=True)
# Daftar telah diubah menjadi kamus, dan hasilnya diperiksa.print(texts[2])