# Buat dataset dokumen

Panduan ini akan menunjukkan cara membuat dataset dokumen dengan `PdfFolder` dan beberapa metadata. Ini adalah solusi tanpa kode untuk dengan cepat membuat dataset dokumen dengan beberapa ribu PDF.

> [!TIP]
> Anda dapat mengontrol akses ke dataset Anda dengan meminta pengguna untuk membagikan informasi kontak mereka terlebih dahulu. Lihat panduan [Gated datasets](https://huggingface.co/docs/hub/datasets-gated) untuk informasi lebih lanjut tentang cara mengaktifkan fitur ini di Hub.

## PdfFolder

`PdfFolder` adalah pembangun dataset yang dirancang untuk memuat dataset dokumen dengan ribuan PDF dengan cepat tanpa mengharuskan Anda menulis kode apa pun.

> [!TIP]
> 💡 Lihat [hierarki pola Split](repository_structure#split-pattern-hierarchy) untuk mempelajari lebih lanjut tentang bagaimana `PdfFolder` membuat split dataset berdasarkan struktur repositori dataset Anda.

`PdfFolder` secara otomatis menyimpulkan label kelas dari dataset Anda berdasarkan nama direktori. Simpan dataset Anda dalam struktur direktori seperti:

```
folder/train/resume/0001.pdf
folder/train/resume/0002.pdf
folder/train/resume/0003.pdf

folder/train/invoice/0001.pdf
folder/train/invoice/0002.pdf
folder/train/invoice/0003.pdf
```

Jika dataset mengikuti struktur `PdfFolder`, maka Anda dapat memuatnya langsung dengan [load_dataset()](/docs/datasets/main/id/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("path/to/folder")
```

Ini setara dengan meneruskan `pdffolder` secara manual di [load_dataset()](/docs/datasets/main/id/package_reference/loading_methods#datasets.load_dataset) dan direktori di `data_dir`:

```py
>>> dataset = load_dataset("pdffolder", data_dir="/path/to/folder")
```

Anda juga dapat menggunakan `pdffolder` untuk memuat dataset yang melibatkan beberapa split. Untuk melakukannya, direktori dataset Anda harus memiliki struktur berikut:

```
folder/train/resume/0001.pdf
folder/train/resume/0002.pdf
folder/test/invoice/0001.pdf
folder/test/invoice/0002.pdf
```

> [!WARNING]
> Jika semua file PDF berada dalam satu direktori atau tidak berada pada level struktur direktori yang sama, kolom `label` tidak akan ditambahkan secara otomatis. Jika Anda membutuhkannya, tetapkan `drop_labels=False` secara eksplisit.

Jika ada informasi tambahan yang ingin Anda sertakan tentang dataset Anda, seperti teks caption atau bounding box, tambahkan sebagai file `metadata.csv` di folder Anda. Hal ini memungkinkan Anda dengan cepat membuat dataset untuk berbagai tugas computer vision seperti text captioning atau object detection. Anda juga dapat menggunakan file JSONL `metadata.jsonl` atau file Parquet `metadata.parquet`.

```
folder/train/metadata.csv
folder/train/0001.pdf
folder/train/0002.pdf
folder/train/0003.pdf
```

File `metadata.csv` Anda harus memiliki field `file_name` atau `*_file_name` yang menghubungkan file PDF dengan metadata mereka:

```csv
file_name,additional_feature
0001.pdf,This is a first value of a text feature you added to your pdfs
0002.pdf,This is a second value of a text feature you added to your pdfs
0003.pdf,This is a third value of a text feature you added to your pdfs
```

atau menggunakan `metadata.jsonl`:

```jsonl
{"file_name": "0001.pdf", "additional_feature": "This is a first value of a text feature you added to your PDFs"}
{"file_name": "0002.pdf", "additional_feature": "This is a second value of a text feature you added to your PDFs"}
{"file_name": "0003.pdf", "additional_feature": "This is a third value of a text feature you added to your PDFs"}
```

Di sini, `file_name` harus berupa nama file PDF yang berada di samping file metadata. Secara lebih umum, ini harus berupa path relatif dari direktori yang berisi metadata ke file PDF.

Anda dapat menunjuk ke lebih dari satu PDF di setiap baris dalam dataset Anda, misalnya jika input dan output Anda keduanya berupa PDF:

```jsonl
{"input_file_name": "0001.pdf", "output_file_name": "0001_output.pdf"}
{"input_file_name": "0002.pdf", "output_file_name": "0002_output.pdf"}
{"input_file_name": "0003.pdf", "output_file_name": "0003_output.pdf"}
```

Anda juga dapat mendefinisikan daftar PDF. Dalam hal itu, Anda perlu menamai field `file_names` atau `*_file_names`. Berikut adalah contohnya:

```jsonl
{"pdfs_file_names": ["0001_part1.pdf", "0001_part2.pdf"], "label": "urgent"}
{"pdfs_file_names": ["0002_part1.pdf", "0002_part2.pdf"], "label": "urgent"}
{"pdfs_file_names": ["0003_part1.pdf", "0002_part2.pdf"], "label": "normal"}
```

### OCR (Optical Character Recognition)

Dataset OCR memiliki teks yang terkandung dalam PDF. Contoh `metadata.csv` mungkin terlihat seperti:

```csv
file_name,text
0001.pdf,Invoice 1234 from 01/01/1970...
0002.pdf,Software Engineer Resume. Education: ...
0003.pdf,Attention is all you need. Abstract. The ...
```

Muat dataset dengan `PdfFolder`, dan kolom `text` untuk caption PDF akan dibuat:

```py
>>> dataset = load_dataset("pdffolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"Invoice 1234 from 01/01/1970..."
```

### Unggah dataset ke Hub

Setelah Anda membuat dataset, Anda dapat membagikannya menggunakan `huggingface_hub`, misalnya. Pastikan Anda telah menginstal pustaka [huggingface_hub](https://huggingface.co/docs/huggingface_hub/index) dan telah masuk ke akun Hugging Face Anda (lihat [tutorial Upload with Python](upload_dataset#upload-with-python) untuk detail lebih lanjut).

Unggah dataset Anda dengan `huggingface_hub.HfApi.upload_folder`:

```py
from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path="/path/to/local/dataset",
    repo_id="username/my-cool-dataset",
    repo_type="dataset",
)
```

