Açık Kaynak Python PDF Ayrıştırıcı Kütüphanesi
PDF belgelerinden metin, resim, tablo ve diğer içerikleri ayrıştırmak, okumak ve çıkarmak için bu ücretsiz ve açık kaynaklı Python kütüphanesini deneyin.
PyMuPDF nedir?
Fitz olarak da bilinen PyMuPDF, PDF dosyalarıyla çalışmak için kapsamlı bir araç seti sağlayan açık kaynaklı bir Python kütüphanesidir. Kullanıcılar PyMuPDF ile PDF'leri açma, metin, resim ve tabloları çıkarma, döndürme ve kırpma gibi sayfa özelliklerini düzenleme, yeni PDF belgeleri oluşturma ve PDF sayfalarını resimlere dönüştürme gibi görevleri verimli bir şekilde gerçekleştirebilir.
PyMuPDF aşağıda listelenen çeşitli özellikleri destekler:
- PDF Belge Okuma: PyMuPDF, PDF belgelerini açabilir ve okuyabilir, böylece içlerindeki metinlere, resimlere ve diğer içeriklere erişebilirsiniz.
- Metin Çıkarımı: Metin içeriği, yazı tipleri ve düzen bilgileri dahil olmak üzere PDF belgelerinden metin çıkarabilirsiniz.
- Görüntü Çıkarma: JPEG veya PNG gibi çeşitli formatlardaki PDF belgelerinden görüntü çıkarabilirsiniz.
- Tablo Çıkarma: PDF belgelerinden tabloları da çıkarabilirsiniz.
Bu incelemede, birincil odak noktamız kütüphanenin çıkarma ve ayrıştırma özellikleri olacak. Bölme, birleştirme ve sayfa yönetimi özelliklerinin derinlemesine bir değerlendirmesi için lütfen buraya tıklayın.
GitHub İstatistikleri
İsim: PyMuPDFDil: Python
Yıldızlar: 6.9K
Çatallar: 589
Lisans: GNU Affero General Public License v3.0
Depo en son şu tarihte güncellendi: 2025-04-15
PyMuPDF'e Başlarken
PyMuPDF'i kurmak ve kullanmak için Python 3.8.0 veya üzeri sürüme ihtiyacınız var. Bu nedenle, önce Python'u kurun ve ardından aşağıdaki komutları kullanarak PyMuPDF'i makinenize pip ve sanal ortam kullanarak kurun.
Linux
python -m venv pymupdf-venv
. pymupdf-venv/bin/activate
pip install pymupdf
Mac OS X
python -m venv pymupdf-venv
. pymupdf-venv/bin/activate
pip install pymupdf
Pencereler
python -m venv pymupdf-venv
.\pymupdf-venv\Scripts\activate
pip install pymupdf
PDF'den Metni Çıkar
Aşağıdaki kodda gösterildiği gibi, Python'daki PyMuPDF kütüphanesini kullanarak, kütüphanede sağlanan fonksiyonları kullanarak bir PDF belgesinden metin çıkarabilir ve kelime sayımı gibi metin analizleri yapabilirsiniz:
# Import PyMuPDF | |
import fitz | |
# Open a PDF file | |
pdf_document = "documentprocessing.pdf" | |
doc = fitz.open(pdf_document) | |
# Initialize an empty string to store extracted text | |
extracted_text = "" | |
# Iterate through each page and extract text | |
for page_num in range(doc.page_count): | |
page = doc[page_num] | |
extracted_text += page.get_text() | |
# Close the PDF document | |
doc.close() | |
# Perform text analysis (e.g., count words) | |
word_count = len(extracted_text.split()) | |
print(f"The Extracted text is as follows:\n{extracted_text}") | |
print(f"Total words in the document: {word_count}") |
Çıktı
Aşağıdaki görselde PDF dosyasındaki çıkarılan metin ve kelime sayısı gösterilmektedir:
PDF'den Görüntüleri Çıkar
Python'da bir PDF belgesinden görüntüleri çıkarmak için PyMuPDF kütüphanesini kullanabiliriz. Aşağıdaki kod parçacığı belirtilen PDF dosyasını açar, PDF'den görüntüleri çıkarır ve bunları geçerli çalışma dizinine kaydeder:
# Import PyMuPDF | |
import fitz | |
# File path you want to extract images from | |
file = "data.pdf" | |
# Open the file | |
pdf_file = fitz.open(file) | |
# Iterate over PDF pages | |
for page_index in range(len(pdf_file)): | |
# Get the page itself | |
page = pdf_file[page_index] | |
# Get the image list for the page | |
image_list = page.get_images(full=True) | |
# Printing the number of images found on this page | |
if image_list: | |
print(f"[+] Found a total of {len(image_list)} images in page {page_index + 1}") | |
else: | |
print("[!] No images found on page", page_index + 1) | |
# Extract images from the page | |
for image_index, img in enumerate(image_list, start=1): | |
xref = img[0] | |
base_image = pdf_file.extract_image(xref) | |
image_bytes = base_image["image"] | |
image_ext = base_image["ext"] | |
# Save the image to a file | |
image_filename = f"page_{page_index + 1}_image_{image_index}.{image_ext}" | |
with open(image_filename, "wb") as img_file: | |
img_file.write(image_bytes) | |
# Close the PDF document | |
pdf_file.close() |
Çıktı
Aşağıda PDF belgesinden çıkarılan PNG Görüntüsü bulunmaktadır
PDF'den Tabloları Çıkar
Ayrıca bir PDF belgesini işlemek ve ondan tablolar çıkarmak için PyMuPDF kütüphanesini de kullanabiliriz. Belirtilen PDF dosyasını açan ve PDF belgesinden tablolar çıkaran aşağıdaki kod parçacığını kontrol edin:
# import package PyMuPDF | |
import fitz | |
# Open some document, for example a PDF (could also be EPUB, XPS, etc.) | |
doc = fitz.open("table_handling_example.pdf") | |
# Load a desired page. This works via 0-based numbers | |
page = doc[0] | |
# Look for tables on this page and display the table count | |
tabs = page.find_tables() | |
print(f"{len(tabs.tables)} table(s) on {page}") | |
# Select the first table | |
tab = tabs[0] | |
df = tab.to_pandas() | |
print("Table:") | |
print(df) |
Çıktı
Aşağıdaki ekran görüntüsü PDF belgesinden çıkarılan tabloyu göstermektedir:
PDF'ye Metin Ekle
Aşağıdaki Python kod parçası, bir PDF dosyasına metin eklemek ve değiştirilmiş PDF'yi text.pdf olarak kaydetmek için PyMuPDF kütüphanesinin kullanımını göstermektedir:
# Import PyMuPDF | |
import fitz | |
# Open a PDF file | |
doc = fitz.open("documentprocessing.pdf") | |
page = doc[0] # Access the first page | |
# Define the starting point for the text | |
p = fitz.Point(75, 150) | |
# Define the text to be inserted | |
text = "Some text,\nspread across\nseveral lines." | |
# Insert the text on the page | |
rc = page.insert_text(p, text) | |
# Print the number of lines printed on the page | |
print("%i lines printed on page %i." % (rc, page.number)) | |
# Save the modified PDF to a new file | |
doc.save("text.pdf") |
Çıktı
Yukarıdaki kod kullanılarak eklenen metin aşağıda verilen kırmızı kutucuk içinde vurgulanmıştır:
PyMuPDF ile OCR kullanarak PDF Metin Tanıma
We will perform OCR on the PDF file containing the following image:# Import PyMuPDF | |
import fitz | |
import os | |
# Set the TESSDATA_PREFIX environment variable to the folder containing the language file | |
os.environ['TESSDATA_PREFIX'] = 'F://' | |
# Open the PDF file | |
pdf_document = fitz.open('data.pdf') | |
# Get the page from the PDF document | |
page_number = 1 | |
page = pdf_document[page_number - 1] | |
# Perform OCR using get_textpage_ocr | |
textpage_ocr = page.get_textpage_ocr(flags=3, language='eng', dpi=72, full=False, tessdata=None) | |
# Extract text from the OCR result | |
text = textpage_ocr.extractText() | |
# Print the OCR result | |
print(text) | |
# Close the PDF document | |
pdf_document.close() |
Çıktı
Aşağıdaki resim, sağlanan PDF dosyasında bulunan resimden çıkarılan metni göstermektedir:
Çözüm
Özetle, PyMuPDF bazı belirgin güçlü ve zayıf yönleri olan profesyonel bir araçtır. OCR ve metin çıkarma gibi görevler için harikadır ve bu da onu PDF'lerdeki metinleri işlemek için değerli kılar.
Ancak, özellikle PDF'ler karmaşık bir yapıya veya daha fazla sayfa sayısına sahip olduğunda PDF'lerden tabloları çıkarmada pek iyi değildir, bu bazı kullanıcılar için bir dezavantaj olabilir. Ayrıca, belirli durumlarda Pandas ve Tesseract OCR dil veri dosyaları gibi ek kütüphaneler gerektirebilir ve bu da kullanımına karmaşıklık katar. Bu sınırlamalara rağmen, PyMuPDF PDF'lerdeki metinlerle çalışmak için sağlam bir seçim olmaya devam ediyor.