Datasets documentation

Créer un jeu de données de documents

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Créer un jeu de données de documents

Ce guide vous montre comment créer un jeu de données de documents avec PdfFolder et quelques métadonnées. Il s’agit d’une solution sans code pour créer rapidement un jeu de données de documents contenant plusieurs milliers de PDF.

Vous pouvez contrôler l'accès à votre jeu de données en exigeant que les utilisateurs partagent d'abord leurs coordonnées. Consultez le guide Gated datasets pour plus d'informations sur la manière d'activer cette fonctionnalité sur le Hub.

PdfFolder

Le PdfFolder est un constructeur de jeu de données conçu pour charger rapidement un jeu de données de documents contenant plusieurs milliers de PDF, sans qu'il soit nécessaire d'écrire du code.

💡 Consultez la hiérarchie des motifs de partitionnement pour en savoir plus sur la manière dont PdfFolder crée des partitions de jeu de données en fonction de la structure de votre dépôt de jeu de données.

PdfFolder infère automatiquement les étiquettes de classes de votre jeu de données en fonction du nom du répertoire. Stockez votre jeu de données dans une structure de répertoires de la forme :

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

Si le jeu de données suit la structure PdfFolder, vous pouvez le charger directement avec load_dataset() :

>>> from datasets import load_dataset

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

Cela équivaut à passer pdffolder manuellement dans load_dataset() et le répertoire dans data_dir :

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

Vous pouvez également utiliser pdffolder pour charger des jeux de données impliquant plusieurs splits. Pour ce faire, le répertoire de votre jeu de données doit avoir la structure suivante :

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

Si tous les fichiers PDF sont contenus dans un seul répertoire ou s'ils ne sont pas au même niveau de la structure de répertoires, la colonne label ne sera pas ajoutée automatiquement. Si vous en avez besoin, définissez explicitement drop_labels=False.

Si vous souhaitez inclure des informations supplémentaires sur votre jeu de données, comme des légendes de texte ou des boîtes englobantes, ajoutez-les sous forme de fichier metadata.csv dans votre dossier. Cela vous permet de créer rapidement des jeux de données pour différentes tâches de vision par ordinateur, comme la légende de texte ou la détection d’objets. Vous pouvez également utiliser un fichier JSONL metadata.jsonl ou un fichier Parquet metadata.parquet.

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

Votre fichier metadata.csv doit contenir un champ file_name ou *_file_name qui associe les fichiers PDF à leurs métadonnées :

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 en utilisant metadata.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"}

Ici, file_name doit être le nom du fichier PDF situé à côté du fichier de métadonnées. Plus généralement, il doit s’agir du chemin relatif depuis le répertoire contenant les métadonnées jusqu’au fichier PDF.

Il est possible de pointer vers plusieurs PDF dans chaque ligne de votre jeu de données, par exemple si votre entrée et votre sortie sont toutes deux des PDF :

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

Vous pouvez également définir des listes de PDF. Dans ce cas, vous devez nommer le champ file_names ou *_file_names. Voici un exemple :

{"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 (Reconnaissance Optique de Caractères)

Les jeux de données OCR contiennent le texte présent dans un PDF. Un exemple de metadata.csv peut ressembler à :

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

Chargez le jeu de données avec PdfFolder, et il créera une colonne text pour les légendes des PDF :

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

Téléverser le jeu de données sur le Hub

Une fois que vous avez créé un jeu de données, vous pouvez le partager à l’aide de huggingface_hub, par exemple. Assurez-vous d’avoir installé la bibliothèque huggingface_hub et d’être connecté à votre compte Hugging Face (voir le tutoriel sur l’envoi avec Python pour plus de détails).

Téléchargez votre jeu de données avec huggingface_hub.HfApi.upload_folder :

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",
)
Update on GitHub