# 문서 데이터셋 만들기

이 가이드에서는 `PdfFolder`와 일부 메타데이터를 사용하여 문서 데이터셋을 만드는 방법을 보여줍니다. 수천 개의 PDF로 문서 데이터셋을 빠르게 생성하기 위한 무코드 솔루션입니다.

> [!TIP]
> 사용자가 먼저 연락처 정보를 공유하도록 요구하여 데이터셋에 대한 액세스를 제어할 수 있습니다. Hub에서 이 기능을 활성화하는 방법에 대한 자세한 내용은 [Gated datasets](https://huggingface.co/docs/hub/datasets-gated) 가이드를 참고하세요.

## PdfFolder

`PdfFolder`는 수천 개의 PDF로 구성된 문서 데이터셋을 코드를 작성하지 않고도 빠르게 로드하도록 설계된 데이터셋 빌더입니다.

> [!TIP]
> 💡 `PdfFolder`가 데이터셋 저장소 구조를 기반으로 데이터셋 스플릿을 생성하는 방법에 대해 자세히 알아보려면 [Split pattern hierarchy](repository_structure#split-pattern-hierarchy)를 확인해 보세요.

`PdfFolder`는 디렉터리 이름을 기반으로 데이터셋의 클래스 라벨을 자동으로 추론합니다. 데이터셋을 다음과 같은 디렉터리 구조로 저장하세요:

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

데이터셋이 `PdfFolder` 구조를 따르는 경우, [load_dataset()](/docs/datasets/v5.2.0/ko/package_reference/loading_methods#datasets.load_dataset)를 사용하여 직접 로드할 수 있습니다:

```py
>>> from datasets import load_dataset

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

`pdffolder`를 [load_dataset()](/docs/datasets/v5.2.0/ko/package_reference/loading_methods#datasets.load_dataset)에 수동으로 전달하고 `data_dir`에 해당 디렉터리를 지정하는 것과 동일합니다:

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

`pdffolder`을 사용하여 여러 스플릿을 포함하는 데이터셋을 로드할 수도 있습니다. 이를 위해 데이터셋 디렉토리는 다음 구조를 가져야 합니다:

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

> [!WARNING]
> 모든 PDF 파일이 단일 디렉터리에 포함되어 있거나 동일한 디렉터리 구조 레벨에 있지 않은 경우, `label` 열이 자동으로 추가되지 않습니다. 이 열이 필요한 경우 `drop_labels=False`를 명시적으로 설정하세요.

데이터셋에 텍스트 캡션이나 바운딩 박스처럼 포함하고 싶은 추가 정보가 있다면, 폴더에 `metadata.csv` 파일로 추가하세요. 이를 통해 텍스트 캡션이나 객체 탐지와 같은 다양한 컴퓨터 비전 작업용 데이터셋을 빠르게 만들 수 있습니다. JSONL 파일 `metadata.jsonl` 또는 Parquet 파일 `metadata.parquet`도 사용할 수 있습니다.

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

`metadata.csv` 파일에는 PDF 파일과 메타데이터를 연결하는 `file_name` 또는 `*_file_name` 필드가 있어야 합니다:

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

또는 `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"}
```

여기서 `file_name`은 메타데이터 파일 옆에 있는 PDF 파일의 이름이어야 합니다. 더 일반적으로, 메타데이터가 포함된 디렉터리에서 PDF 파일까지의 상대 경로여야 합니다.

데이터셋의 각 행에서 PDF를 하나 이상 지정할 수 있습니다. 예를 들어 입력과 출력 모두 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"}
```

PDF 목록을 정의할 수도 있습니다. 이 경우 필드 이름을 `file_names` 또는 `*_file_names`으로 지정해야 합니다. 예시는 다음과 같습니다:

```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 (광학 문자 인식)

OCR 데이터셋에는 PDF에 포함된 텍스트가 있습니다. `metadata.csv`의 예시는 다음과 같습니다:

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

`PdfFolder`로 데이터셋을 로드하면 PDF 캡션을 위한 `text` 열이 생성됩니다:

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

### Hub에 데이터셋 업로드

데이터셋을 생성한 후에는 `huggingface_hub` 등을 사용하여 공유할 수 있습니다. [huggingface_hub](https://huggingface.co/docs/huggingface_hub/index) 라이브러리가 설치되어 있고 Hugging Face 계정에 로그인되어 있는지 확인하세요(자세한 내용은 [Upload with Python tutorial](upload_dataset#upload-with-python)를 참고하세요).

`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",
)
```

