# Criar um conjunto de dados de documentos

Este guia mostrará como criar um conjunto de dados de documentos com `PdfFolder` e alguns metadados. Esta é uma solução sem código para criar rapidamente um conjunto de dados de documentos com vários milhares de PDFs.

> [!TIP]
> Você pode controlar o acesso ao seu conjunto de dados exigindo que os usuários compartilhem primeiro suas informações de contato. Consulte o guia [Conjuntos de dados com controle de acesso](https://huggingface.co/docs/hub/datasets-gated) para mais informações sobre como habilitar esse recurso no Hub.

## PdfFolder

O `PdfFolder` é um construtor de dataset projetado para carregar rapidamente um conjunto de dados de documentos com vários milhares de PDFs, sem exigir que você escreva qualquer código.

> [!TIP]
> 💡 Dê uma olhada na [hierarquia do padrão Split](repository_structure#split-pattern-hierarchy) para saber mais sobre como o `PdfFolder` cria as divisões do conjunto de dados com base na estrutura do repositório do seu conjunto de dados.

`PdfFolder` infere automaticamente os rótulos de classe do seu conjunto de dados com base no nome do diretório. Armazene seu conjunto de dados em uma estrutura de diretórios como:

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

Se o conjunto de dados seguir a estrutura `PdfFolder`, você pode carregá-lo diretamente com [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

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

Isso é equivalente a passar `pdffolder` manualmente em [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset) e o diretório em `data_dir`:

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

Você também pode usar `pdffolder` para carregar conjuntos de dados que envolvem múltiplas divisões. Para isso, o diretório do seu conjunto de dados deve ter a seguinte estrutura:

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

> [!WARNING]
> Se todos os arquivos PDF estiverem em um único diretório ou se não estiverem no mesmo nível da estrutura de diretórios, a coluna `label` não será adicionada automaticamente. Se você precisar dela, defina `drop_labels=False` explicitamente.

Se houver informações adicionais que você deseja incluir sobre seu conjunto de dados, como legendas de texto ou caixas delimitadoras, adicione-as como um arquivo `metadata.csv` na sua pasta. Isso permite criar rapidamente conjuntos de dados para diferentes tarefas de visão computacional, como legendagem de texto ou detecção de objetos. Você também pode usar um arquivo JSONL `metadata.jsonl` ou um arquivo Parquet `metadata.parquet`.

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

O seu arquivo `metadata.csv` deve ter um campo `file_name` ou `*_file_name` que vincule os arquivos PDF aos seus metadados:

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

ou usando `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"}
```

Aqui, o `file_name` deve ser o nome do arquivo PDF ao lado do arquivo de metadados. Mais geralmente, deve ser o caminho relativo do diretório que contém os metadados até o arquivo PDF.

É possível apontar para mais de um PDF em cada linha do seu conjunto de dados, por exemplo, se tanto a sua entrada quanto a sua saída forem PDFs:

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

Você também pode definir listas de PDFs. Nesse caso, é necessário nomear o campo `file_names` ou `*_file_names`. Aqui está um exemplo:

```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 (Reconhecimento Óptico de Caracteres)

Os conjuntos de dados de OCR contêm o texto presente em um PDF. Um exemplo de `metadata.csv` pode ser:

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

Carregue o conjunto de dados com `PdfFolder` e ele criará uma coluna `text` para as legendas dos PDFs:

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

### Enviar o conjunto de dados para o Hub

Depois de criar um conjunto de dados, você pode compartilhá-lo usando, por exemplo, o `huggingface_hub`. Certifique-se de que a biblioteca [huggingface_hub](https://huggingface.co/docs/huggingface_hub/index) está instalada e de que você está conectado à sua conta do Hugging Face (veja o [tutorial de upload com Python](upload_dataset#upload-with-python) para mais detalhes).

Envie seu conjunto de dados com `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",
)
```

