ساخت اسکریپت برای استخراج داده از PDF با پایتون
استخراج داده از فایلهای PDF یک وظیفه رایج در بسیاری از زمینهها مانند تحلیل داده، اتوماسیون فرآیندهای تجاری و آرشیو دیجیتال است. در حالی که PDF به عنوان یک فرمت قابل حمل طراحی شده است، استخراج اطلاعات از آن میتواند چالشبرانگیز باشد، زیرا دادهها اغلب به صورت تصویری یا در قالبهای پیچیده ذخیره میشوند. خوشبختانه، پایتون کتابخانههای قدرتمندی را ارائه میدهد که این فرآیند را ساده میکنند. این مقاله به بررسی روشهای مختلف استخراج داده از PDF با استفاده از پایتون میپردازد و یک راهنمای عملی برای ساخت اسکریپتهای اتوماسیون ارائه میدهد.
چرا پایتون برای استخراج داده از PDF؟
پایتون به دلایل متعددی انتخاب مناسبی برای استخراج داده از PDF است:
- کتابخانههای غنی: پایتون دارای کتابخانههای متعددی است که به طور خاص برای کار با PDF طراحی شدهاند، مانند PyPDF2، pdfminer.six، و Tesseract OCR (همراه با کتابخانه pytesseract).
- سادگی و خوانایی: سینتکس پایتون ساده و خوانا است، که نوشتن و نگهداری اسکریپتها را آسان میکند.
- جامعه فعال: پایتون دارای یک جامعه بزرگ و فعال از توسعهدهندگان است که پشتیبانی و منابع زیادی را ارائه میدهند.
- قابلیتهای اتوماسیون: پایتون به خوبی با سایر ابزارها و فناوریها ادغام میشود و امکان اتوماسیون کامل فرآیند استخراج داده را فراهم میکند.
کتابخانههای کلیدی پایتون برای استخراج PDF
در اینجا به معرفی برخی از مهمترین کتابخانههای پایتون برای استخراج داده از PDF میپردازیم:
PyPDF2
PyPDF2 یک کتابخانه خالص پایتون است که برای خواندن، نوشتن و دستکاری فایلهای PDF استفاده میشود. این کتابخانه برای استخراج متن ساده، ادغام PDFها، تقسیم PDFها و افزودن علامتهای آبی مفید است. با این حال، PyPDF2 در استخراج جداول پیچیده یا تصاویر عملکرد محدودی دارد.
pdfminer.six
pdfminer.six یک کتابخانه قدرتمندتر است که برای استخراج متن، تصاویر و سایر عناصر از PDF استفاده میشود. این کتابخانه از یک رویکرد مبتنی بر تحلیل ساختار PDF استفاده میکند و میتواند اطلاعات دقیقتری را نسبت به PyPDF2 استخراج کند. pdfminer.six برای استخراج جداول و دادههای ساختاریافته مناسبتر است.
Tesseract OCR و pytesseract
اگر PDF شما حاوی متن اسکن شده یا تصاویر است، باید از فناوری تشخیص نوری کاراکترها (OCR) استفاده کنید. Tesseract OCR یک موتور OCR متنباز است که میتواند متن را از تصاویر استخراج کند. pytesseract یک رابط پایتون برای Tesseract OCR است که استفاده از آن را در اسکریپتهای پایتون آسان میکند.
ساخت یک اسکریپت پایه برای استخراج متن از PDF با PyPDF2
در اینجا یک اسکریپت پایه برای استخراج متن از یک فایل PDF با استفاده از PyPDF2 آورده شده است:
import PyPDF2
def extract_text_from_pdf(pdf_path):
text = ""
with open(pdf_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
for page_num in range(len(reader.pages)):
page = reader.pages[page_num]
text += page.extract_text()
return text
if __name__ == "__main__":
pdf_file = "example.pdf" # نام فایل PDF خود را جایگزین کنید
extracted_text = extract_text_from_pdf(pdf_file)
print(extracted_text)
این اسکریپت فایل PDF را باز میکند، هر صفحه را به صورت جداگانه میخواند و متن استخراج شده از هر صفحه را به یک رشته متنی اضافه میکند. در نهایت، رشته متنی کامل چاپ میشود.
استخراج دادههای ساختاریافته با pdfminer.six
برای استخراج دادههای ساختاریافته مانند جداول، pdfminer.six گزینه بهتری است. در اینجا یک مثال ساده از نحوه استفاده از pdfminer.six برای استخراج متن و موقعیت آن در صفحه آورده شده است:
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer
def extract_data_from_pdf(pdf_path):
data = []
for page_layout in extract_pages(pdf_path):
for element in page_layout:
if isinstance(element, LTTextContainer):
data.append((element.get_text(), element.bbox))
return data
if __name__ == "__main__":
pdf_file = "example.pdf" # نام فایل PDF خود را جایگزین کنید
extracted_data = extract_data_from_pdf(pdf_file)
for text, bbox in extracted_data:
print(f"Text: {text}")
print(f"Bounding Box: {bbox}")
این اسکریپت از تابع `extract_pages` برای استخراج عناصر صفحه استفاده میکند. سپس، هر عنصر صفحه بررسی میشود تا ببیند آیا یک `LTTextContainer` است (که نشاندهنده متن است). اگر عنصر یک `LTTextContainer` باشد، متن و موقعیت آن (bounding box) به لیست `data` اضافه میشود.
استخراج متن از PDFهای اسکن شده با Tesseract OCR و pytesseract
اگر PDF شما حاوی متن اسکن شده است، باید از OCR استفاده کنید. در اینجا یک مثال از نحوه استفاده از Tesseract OCR و pytesseract برای استخراج متن از یک فایل PDF اسکن شده آورده شده است:
from PIL import Image
import pytesseract
import pdf2image
def extract_text_from_scanned_pdf(pdf_path):
text = ""
images = pdf2image.convert_from_path(pdf_path)
for image in images:
text += pytesseract.image_to_string(image, lang='fas') # 'fas' برای زبان فارسی
return text
if __name__ == "__main__":
pdf_file = "scanned_example.pdf" # نام فایل PDF اسکن شده خود را جایگزین کنید
extracted_text = extract_text_from_scanned_pdf(pdf_file)
print(extracted_text)
این اسکریپت از کتابخانه `pdf2image` برای تبدیل هر صفحه PDF به یک تصویر استفاده میکند. سپس، از `pytesseract` برای استخراج متن از هر تصویر استفاده میکند. پارامتر `lang=’fas’` برای تعیین زبان فارسی استفاده میشود. توجه داشته باشید که برای استفاده از این اسکریپت، باید Tesseract OCR را نصب و در مسیر سیستم خود تنظیم کنید.
بهبود دقت استخراج داده
دقت استخراج داده از PDF میتواند تحت تأثیر عوامل مختلفی قرار گیرد، مانند کیفیت PDF، پیچیدگی قالببندی و کیفیت اسکن. در اینجا چند نکته برای بهبود دقت استخراج داده آورده شده است:
- پیشپردازش تصویر: اگر از OCR استفاده میکنید، پیشپردازش تصاویر میتواند دقت را بهبود بخشد. این شامل مواردی مانند حذف نویز، تنظیم کنتراست و تبدیل به مقیاس خاکستری است.
- انتخاب کتابخانه مناسب: بسته به نوع PDF و دادههایی که میخواهید استخراج کنید، کتابخانه مناسب را انتخاب کنید.
- تنظیم پارامترها: بسیاری از کتابخانهها پارامترهایی را ارائه میدهند که میتوانید برای تنظیم فرآیند استخراج استفاده کنید.
- پسپردازش متن: پس از استخراج متن، ممکن است نیاز به انجام برخی از عملیات پسپردازش داشته باشید، مانند حذف کاراکترهای نامطلوب، تصحیح غلطهای املایی و قالببندی متن.
نتیجهگیری
استخراج داده از PDF با استفاده از پایتون یک فرآیند قدرتمند و انعطافپذیر است. با استفاده از کتابخانههای مناسب و تکنیکهای پیشرفته، میتوانید به طور خودکار دادهها را از فایلهای PDF استخراج کنید و آنها را برای تجزیه و تحلیل و سایر اهداف آماده کنید. این مقاله یک مقدمه جامع برای استخراج داده از PDF با پایتون ارائه داد و امیدواریم که به شما در شروع کار با این فناوری کمک کند.

بدون دیدگاه