# Tạo bộ dữ liệu tài liệu

Hướng dẫn này sẽ cho bạn thấy cách tạo một tập dữ liệu tài liệu bằng `PdfFolder` cùng một số metadata. Đây là giải pháp không cần viết code để nhanh chóng tạo tập dữ liệu tài liệu với hàng nghìn tệp PDF.

> [!TIP]
> Bạn có thể kiểm soát quyền truy cập vào bộ dữ liệu của mình bằng cách yêu cầu người dùng chia sẻ thông tin liên hệ trước. Xem hướng dẫn [Gated datasets](https://huggingface.co/docs/hub/datasets-gated) để biết thêm thông tin về cách bật tính năng này trên Hub.

## PdfFolder

`PdfFolder` là một trình xây dựng tập dữ liệu được thiết kế để nhanh chóng nạp một tập dữ liệu tài liệu gồm vài nghìn tệp PDF mà không yêu cầu bạn phải viết bất kỳ mã nào.

> [!TIP]
> 💡 Xem [Hierarchie mẫu Split](repository_structure#split-pattern-hierarchy) để tìm hiểu thêm về cách `PdfFolder` tạo các phần chia dataset dựa trên cấu trúc kho dataset của bạn.

`PdfFolder` tự động suy luận nhãn lớp của bộ dữ liệu dựa trên tên thư mục. Hãy lưu bộ dữ liệu của bạn trong cấu trúc thư mục như sau:

```
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
```

Nếu bộ dữ liệu tuân theo cấu trúc `PdfFolder`, bạn có thể tải nó trực tiếp bằng [load_dataset()](/docs/datasets/v5.2.0/vi/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

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

Điều này tương đương với việc truyền `pdffolder` thủ công trong [load_dataset()](/docs/datasets/v5.2.0/vi/package_reference/loading_methods#datasets.load_dataset) và thư mục trong `data_dir`:

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

Bạn cũng có thể sử dụng `pdffolder` để tải các bộ dữ liệu liên quan đến nhiều phần chia. Để làm điều này, thư mục bộ dữ liệu của bạn nên có cấu trúc sau:

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

> [!WARNING]
> Nếu tất cả các tệp PDF nằm trong một thư mục duy nhất hoặc không ở cùng cấp trong cấu trúc thư mục, cột `label` sẽ không được thêm vào tự động. Nếu bạn cần cột này, hãy đặt `drop_labels=False` một cách tường minh.

Nếu có thêm thông tin bạn muốn bao gồm về bộ dữ liệu của mình, chẳng hạn như chú thích văn bản hoặc hộp bao quanh, hãy thêm chúng dưới dạng tệp `metadata.csv` trong thư mục của bạn. Điều này cho phép bạn nhanh chóng tạo các bộ dữ liệu cho các tác vụ thị giác máy tính khác nhau như chú thích văn bản hoặc phát hiện đối tượng. Bạn cũng có thể sử dụng tệp JSONL `metadata.jsonl` hoặc tệp Parquet `metadata.parquet`.

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

Tệp `metadata.csv` của bạn phải có trường `file_name` hoặc `*_file_name` để liên kết các tệp PDF với metadata của chúng:

```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
```

hoặc sử dụng `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"}
```

Ở đây, `file_name` phải là tên của tệp PDF nằm cạnh tệp metadata. Nói chung, nó phải là đường dẫn tương đối từ thư mục chứa metadata đến tệp PDF.

Bạn có thể trỏ đến nhiều hơn một PDF trong mỗi hàng của bộ dữ liệu, ví dụ nếu cả đầu vào và đầu ra của bạn đều là 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"}
```

Bạn cũng có thể định nghĩa các danh sách PDF. Trong trường hợp đó, bạn cần đặt tên trường là `file_names` hoặc `*_file_names`. Dưới đây là một ví dụ:

```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 (Nhận dạng ký tự quang học)

Bộ dữ liệu OCR chứa văn bản có trong một tệp PDF. Một tệp `metadata.csv` mẫu có thể trông như sau:

```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 ...
```

Tải bộ dữ liệu bằng `PdfFolder`, và nó sẽ tạo một cột `text` cho chú thích PDF:

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

### Tải bộ dữ liệu lên Hub

Sau khi tạo xong một dataset, bạn có thể chia sẻ nó bằng cách sử dụng `huggingface_hub`, chẳng hạn. Hãy đảm bảo rằng bạn đã cài đặt thư viện [huggingface_hub](https://huggingface.co/docs/huggingface_hub/index) và đã đăng nhập vào tài khoản Hugging Face của mình (xem [hướng dẫn Upload with Python](upload_dataset#upload-with-python) để biết thêm chi tiết).

Tải lên bộ dữ liệu của bạn bằng `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",
)
```

