# ドキュメントデータセットを作成する

このガイドでは、`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/ja/package_reference/loading_methods#datasets.load_dataset)で直接読み込むことができます:

```py
>>> from datasets import load_dataset

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

これは、[load_dataset()](/docs/datasets/v5.2.0/ja/package_reference/loading_methods#datasets.load_dataset) で `pdffolder` を手動で渡し、`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",
)
```

