Datasets documentation

Muat data pdf

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Muat data pdf

Dukungan Pdf bersifat eksperimental dan dapat berubah.

Dataset Pdf memiliki kolom bertipe Pdf, yang berisi objek pdfplumber.

Untuk bekerja dengan dataset pdf, Anda perlu menginstal paket pdfplumber. Lihat panduan instalasi untuk mempelajari cara menginstalnya.

Saat Anda memuat dataset pdf dan memanggil kolom pdf, file pdf akan didekodekan sebagai Pdf pdfplumber:

>>> from datasets import load_dataset, Pdf

>>> dataset = load_dataset("path/to/pdf/folder", split="train")
>>> dataset[0]["pdf"]
<pdfplumber.pdf.PDF at 0x1075bc320>

Gunakan indeks baris terlebih dahulu, lalu kolom pdf untuk mengakses dataset pdf - dataset[0]["pdf"] - guna menghindari pembuatan semua objek pdf dalam dataset. Jika tidak, proses ini bisa menjadi lambat dan memakan waktu jika Anda memiliki dataset yang besar.

Untuk panduan tentang cara memuat jenis dataset apa pun, lihat panduan pemuatan umum.

Baca halaman

Akses halaman secara langsung dari pdf menggunakan atribut .pages.

Lalu Anda dapat menggunakan fungsi pdfplumber untuk membaca teks, tabel, dan gambar, misalnya:

>>> pdf = dataset[0]["pdf"]
>>> first_page = pdf.pages[0]
>>> first_page
<Page:1>
>>> first_page.extract_text()
Docling Technical Report
Version1.0
ChristophAuer MaksymLysak AhmedNassar MicheleDolfi NikolaosLivathinos
PanosVagenas CesarBerrospiRamis MatteoOmenetti FabianLindlbauer
KasperDinkla LokeshMishra YusikKim ShubhamGupta RafaelTeixeiradeLima
ValeryWeber LucasMorin IngmarMeijer ViktorKuropiatnyk PeterW.J.Staar
AI4KGroup,IBMResearch
Ru¨schlikon,Switzerland
Abstract
This technical report introduces Docling, an easy to use, self-contained, MIT-
licensed open-source package for PDF document conversion.
...
>>> first_page.images
In [24]: first_page.images
Out[24]: 
[{'x0': 256.5,
  'y0': 621.0,
  'x1': 355.49519999999995,
  'y1': 719.9952,
  'width': 98.99519999999995,
  'height': 98.99519999999995,
  'name': 'Im1',
  'stream': <PDFStream(44): raw=88980, {'Type': /'XObject', 'Subtype': /'Image', 'BitsPerComponent': 8, 'ColorSpace': /'DeviceRGB', 'Filter': /'DCTDecode', 'Height': 1024, 'Length': 88980, 'Width': 1024}>,
  'srcsize': (1024, 1024),
  'imagemask': None,
  'bits': 8,
  'colorspace': [/'DeviceRGB'],
  'mcid': None,
  'tag': None,
  'object_type': 'image',
  'page_number': 1,
  'top': 72.00480000000005,
  'bottom': 171.0,
  'doctop': 72.00480000000005}]
>>> first_page.extract_tables()
[]

Anda juga dapat memuat setiap halaman sebagai PIL.Image:

>>> import PIL.Image
>>> import io
>>> first_page.to_image()
<pdfplumber.display.PageImage at 0x107d68dd0>
>>> buffer = io.BytesIO()
>>> first_page.to_image().save(buffer)
>>> img = PIL.Image.open(buffer)
>>> img
<PIL.PngImagePlugin.PngImageFile image mode=P size=612x792>

Perhatikan bahwa Anda dapat meneruskan resolution= ke .to_image() untuk merender gambar dengan resolusi yang lebih tinggi dari nilai default (72 ppi).

File lokal

Anda dapat memuat dataset dari path pdf. Gunakan fungsi cast_column() untuk menerima kolom berisi path file pdf, lalu dekodekan menjadi pdf pdfplumber dengan fitur Pdf:

>>> from datasets import Dataset, Pdf

>>> dataset = Dataset.from_dict({"pdf": ["path/to/pdf_1", "path/to/pdf_2", ..., "path/to/pdf_n"]}).cast_column("pdf", Pdf())
>>> dataset[0]["pdf"]
<pdfplumber.pdf.PDF at 0x1657d0280>

Jika Anda hanya ingin memuat jalur dasar ke dataset pdf tanpa mendekode objek pdf, atur decode=False pada fitur Pdf:

>>> dataset = dataset.cast_column("pdf", Pdf(decode=False))
>>> dataset[0]["pdf"]
{'bytes': None,
 'path': 'path/to/pdf/folder/pdf0.pdf'}

PdfFolder

Anda juga dapat memuat dataset dengan builder dataset PdfFolder yang tidak memerlukan penulisan dataloader kustom. Hal ini menjadikan PdfFolder ideal untuk membuat dan memuat dataset pdf dengan cepat yang berisi beberapa ribu pdf untuk berbagai tugas visi. Struktur dataset pdf Anda harus seperti ini:

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

Jika dataset mengikuti struktur PdfFolder, maka Anda dapat memuatnya langsung dengan load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")

Untuk dataset lokal, ini setara dengan meneruskan pdffolder secara manual di load_dataset() dan direktori di data_dir:

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

Lalu Anda dapat mengakses file pdf sebagai objek pdfplumber.pdf.PDF:

>>> dataset["train"][0]
{"pdf": <pdfplumber.pdf.PDF at 0x161715e50>, "label": 0}

>>> dataset["train"][-1]
{"pdf": <pdfplumber.pdf.PDF at 0x16170bd90>, "label": 1}

Untuk mengabaikan informasi dalam file metadata, atur drop_metadata=True di load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)

Jika Anda tidak memiliki file metadata, PdfFolder secara otomatis menyimpulkan nama label dari nama direktori. Jika Anda ingin menghapus label yang dibuat secara otomatis, atur drop_labels=True. Dalam kasus ini, dataset Anda hanya akan berisi kolom pdf:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)

Terakhir, argumen filters memungkinkan Anda memuat hanya sebagian dari dataset, berdasarkan kondisi pada label atau metadata. Ini sangat berguna jika metadata dalam format Parquet, karena format ini memungkinkan filtering yang cepat. Disarankan juga untuk menggunakan argumen ini dengan streaming=True, karena secara default dataset diunduh sepenuhnya sebelum filtering dilakukan.

>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)

Untuk informasi lebih lanjut tentang membuat dataset PdfFolder Anda sendiri, lihat panduan Membuat dataset pdf.

Dekoding Pdf

Secara default, pdf didekodekan secara berurutan sebagai PDFs pdfplumber saat Anda mengiterasi dataset. Metadata dari pdf didekodekan secara berurutan, dan halaman pdf tidak dibaca sampai Anda mengaksesnya.

Namun, dataset dapat dipercepat secara signifikan menggunakan dekoding multithreaded:

>>> import os
>>> num_threads = num_threads = min(32, (os.cpu_count() or 1) + 4)
>>> dataset = dataset.decode(num_threads=num_threads)
>>> for example in dataset:  # up to 20 times faster !
...     ...

Anda dapat mengaktifkan multithreading menggunakan num_threads. Ini sangat berguna untuk mempercepat streaming data jarak jauh. Namun, hal ini bisa lebih lambat daripada num_threads=0 untuk data lokal pada disk yang cepat.

Jika Anda tidak tertarik dengan dokumen yang didekode sebagai PDFs pdfplumber dan ingin mengakses path/bytes-nya, Anda dapat menonaktifkan dekoding:

>>> dataset = dataset.decode(False)

Catatan: IterableDataset.decode() saat ini hanya tersedia untuk dataset streaming.

Update on GitHub