Datasets documentation
PDF verilerini yükle
PDF verilerini yükle
Pdf desteği deneyseldir ve değişikliklere tabidir.
Pdf veri kümeleri, pdfplumber nesnelerini içeren Pdf türünde sütunlara sahiptir.
pdf veri setleriyle çalışmak için
pdfplumberpaketinin yüklü olması gerekir. Nasıl yükleneceğini öğrenmek için kurulum kılavuzuna göz atın.
Bir pdf veri seti yükleyip pdf sütununu çağırdığınızda, pdf'ler pdfplumber Pdf'leri olarak çözümlenir:
>>> from datasets import load_dataset, Pdf
>>> dataset = load_dataset("path/to/pdf/folder", split="train")
>>> dataset[0]["pdf"]
<pdfplumber.pdf.PDF at 0x1075bc320>Önce satır indeksini, ardından
dataset[0]["pdf"]- böylece veri setindeki tüm pdf nesnelerini oluşturmak zorunda kalmazsınız. Aksi takdirde, büyük bir veri setiniz varsa bu yavaş ve zaman alıcı bir işlem olabilir.
Herhangi bir tür veri setinin nasıl yükleneceğine dair bir kılavuz için genel yükleme kılavuzuna göz atın.
Sayfaları oku
.pages özniteliğini kullanarak bir pdf'den doğrudan sayfalara erişin.
Ardından metinleri, tabloları ve görüntüleri okumak için pdfplumber işlevlerini kullanabilirsiniz, örneğin:
>>> 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()
[]Her sayfayı ayrıca bir PIL.Image olarak da yükleyebilirsiniz:
>>> 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>resolution= parametresini .to_image() fonksiyonuna ileterek görüntüyü varsayılan (72 ppi) değerden daha yüksek bir çözünürlükte oluşturabilirsiniz.
Yerel dosyalar
Bir veri setini pdf yolundan yükleyebilirsiniz. cast_column() fonksiyonunu kullanarak pdf dosya yollarından oluşan bir sütunu kabul edin ve Pdf özelliğiyle onu pdfplumber pdf olarak çözümlen:
>>> 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>Sadece pdf nesnesini çözmek yerine pdf veri setinin altta yatan yolunu yüklemek istiyorsanız, Pdf özelliğinde decode=False olarak ayarlayın:
>>> dataset = dataset.cast_column("pdf", Pdf(decode=False))
>>> dataset[0]["pdf"]
{'bytes': None,
'path': 'path/to/pdf/folder/pdf0.pdf'}PdfFolder
Bir PdfFolder veri seti oluşturucusu ile de özel bir dataloader yazmadan bir veri seti yükleyebilirsiniz. Bu, PdfFolder'ın farklı görü görevleri için birkaç bin pdf içeren pdf veri setlerini hızlı bir şekilde oluşturup yüklemek için ideal olmasını sağlar. Pdf veri seti yapınız şu şekilde olmalıdır:
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.pdfVeri kümesi PdfFolder yapısını izliyorsa, doğrudan load_dataset() ile yükleyebilirsiniz:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")Yerel veri kümeleri için bu, load_dataset() içinde pdffolder'ı ve data_dir içindeki dizini manuel olarak geçmekle eşdeğerdir:
>>> dataset = load_dataset("pdffolder", data_dir="/path/to/folder")Ardından pdf'lere pdfplumber.pdf.PDF nesneleri olarak erişebilirsiniz:
>>> dataset["train"][0]
{"pdf": <pdfplumber.pdf.PDF at 0x161715e50>, "label": 0}
>>> dataset["train"][-1]
{"pdf": <pdfplumber.pdf.PDF at 0x16170bd90>, "label": 1}Üstveri dosyasındaki bilgileri yok saymak için load_dataset() içinde drop_metadata=True değerini ayarlayın:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)Bir metadata dosyanız yoksa, PdfFolder etiket adını dizin adından otomatik olarak çıkarır.
Otomatik olarak oluşturulan etiketleri kaldırmak istiyorsanız, drop_labels=True olarak ayarlayın.
Bu durumda, veri setiniz yalnızca bir pdf sütunu içerecektir:
>>> from datasets import load_dataset
>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)Son olarak filters argümanı, etikete veya meta verilerdeki bir koşula dayalı olarak veri setinin yalnızca bir alt kümesini yüklemenizi sağlar. Bu, meta veriler Parquet formatındaysa özellikle faydalıdır, çünkü bu format hızlı filtrelemeyi mümkün kılar. Varsayılan olarak veri seti filtrelemeden önce tamamen indirildiği için, bu argümanı streaming=True ile kullanmanız da önerilir.
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)Kendi
PdfFolderveri setinizi oluşturmaya ilişkin daha fazla bilgi için pdf veri seti oluşturma kılavuzuna göz atın.
Pdf çözümleme
Varsayılan olarak, bir veri setinde gezinirken pdf'ler PDFs olarak pdfplumber tarafından sıralı biçimde çözümlenir.
pdf'lerin metadata'sı sıralı olarak çözümlenir ve pdf sayfalarına erişene kadar okunmaz.
Ancak çok iş parçacıklı (multithreaded) kod çözme (decoding) kullanarak veri setini önemli ölçüde hızlandırmak mümkündür:
>>> 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 !
... ...Çok iş parçacıklı işlemi num_threads parametresiyle etkinleştirebilirsiniz. Bu, uzaktan veri akışını hızlandırmak için özellikle faydalıdır.
Ancak hızlı disklerdeki yerel veriler için num_threads=0 değerinden daha yavaş olabilir.
pdfplumber tarafından PDFs olarak çözümlenen belgelerle ilgilenmiyorsanız ve bunun yerine yol/baytlara erişmek istiyorsanız, çözümlenmeyi devre dışı bırakabilirsiniz:
>>> dataset = dataset.decode(False)Not: IterableDataset.decode() şu anda yalnızca akış veri setleri için kullanılabilir.
Update on GitHub