# 01. Struktur Dokumen

## Document & Document Loader Catatan

#### catatan

* [Pemuat utama yang digunakan di LangChain.](https://python.langchain.com/v0.1/docs/modules/data_connection/document_loaders/)
* [Daftar pemuat yang digunakan di LangChain.](https://python.langchain.com/v0.1/docs/integrations/document_loaders/)

## Dokumentasi praktis

***

Lembaga Penelitian Kebijakan Perangkat Lunak (SPRi) - Desember 2023

* Penulis: Jaeheung Yoo (Peneliti Utama, Lab Penelitian Kebijakan AI), Jisoo Lee (Rekan Peneliti, Lab Penelitian Kebijakan AI)
* Tautan: [https://spri.kr/posts/view/23669](https://spri.kr/posts/view/23669)
* Nama file: SPRI\_AI\_Brief\_Desember\_2023.pdf

## Dokumen

***

Objek dokumen default di LangChain.

**Properti** - `page_content`: String yang merepresentasikan konten dokumen. - `metadata`: Kamus yang merepresentasikan metadata dokumen.

```python
from langchain_core.documents import Document

document = Document(“Halo, ini adalah dokumen dari Langchain”)
```

````
```notebook-python
# Memeriksa properti sebuah dokumen
document.__dict__
```
````

#### Menambahkan atribut ke metadata

```python
# Tambahkan metadata
document.metadata[“source”] = “TeddyNote”
document.metadata[“page”] = 1
document.metadata[“author”] = “Teddy”
```

```python
# Memeriksa properti dokumen
document.metadata
```

## Pemuat Dokumen

***

Bertanggung jawab untuk mengonversi konten yang dimuat dari berbagai jenis file menjadi objek Dokumen.

### Pemuat Utama

* PyPDFLoader: Pemuat untuk memuat file PDF.
* CSVLoader: Pemuat untuk memuat file CSV.
* UnstructuredHTMLLoader: Pemuat untuk memuat file HTML.
* JSONLoader: Pemuat untuk memuat file JSON.
* TextLoader: Pemuat untuk memuat file teks.
* DirectoryLoader: Pemuat untuk memuat direktori.

```python
# Contoh jalur file
FILE_PATH = “./data/SPRI_AI_Brief_Desember 2023_F.pdf”
```

```python
from langchain_community.document_loaders import PyPDFLoader

# menyiapkan pemuat
loader = PyPDFLoader(FILE_PATH)
```

### load()

* Memuat dan mengembalikan dokumen.
* Hasil yang dikembalikan berupa `List[Document]`.

```python
# Pemuat PDF
docs = loader.load()

# memeriksa jumlah dokumen yang dimuat
len(docs)

# periksa dokumen pertama
docs[0]
```

### load\_and\_split()

* Memisahkan dan mengembalikan sebuah dokumen menggunakan pemisah.
* Hasil yang dikembalikan berupa `List[Document]`.

```python
from langchain_text_splitter import CharacterTextSplitter

# menyiapkan pembagi string
text_splitter = CharacterTextSplitter(chunk_size = 200, chunk_overlap = 0)
# membagi dokumen
docs = loader.load_and_split(text_splitter = text_splitter)

# memeriksa jumlah dokumen yang dimuat
len(docs)
# periksa dokumen pertama
docs[0]
```

### lazy\_load()

* Memuat dokumen dengan cara generator.

```python
# memuat dokumen berdasarkan generator
for doc in loader.lazy_load():
  print(doc.metadata)
```

### aload()

* Pemuatan dokumen asinkron

```python
# memuat dokumen secara asinkron
adocs = loader.aload()

# memuat dokumentasi
await adocs
```
