picture_as_pdf

code Python verified Бесплатная загрузка devices Кроссплатформенный

code Предпросмотр кода

Python
#!/usr/bin/env python3
"""
Email Extractor for PDF Files
Supports digital PDFs and OCR for scanned documents
"""
import re
from pathlib import Path

try:
    import pdfplumber
except ImportError:
    pdfplumber = None

EMAIL_PATTERN = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'

def extract_from_digital_pdf(pdf_path):
    """Extract emails from text-based PDF"""
    if not pdfplumber:
        raise ImportError("Install pdfplumber: pip install pdfplumber")

    emails = set()

    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            text = page.extract_text()
            if text:
                found = re.findall(EMAIL_PATTERN, text)
                emails.update(e.lower() for e in found)

    return sorted(emails)

def extract_with_ocr(pdf_path):
    """Extract emails from scanned PDF using OCR"""
    try:
        import pytesseract
        from pdf2image import convert_from_path
    except ImportError:
        raise ImportError("Install: pip install pytesseract pdf2image")

    emails = set()
    images = convert_from_path(pdf_path)

    for img in images:
        text = pytesseract.image_to_string(img)
        found = re.findall(EMAIL_PATTERN, text)
        emails.update(e.lower() for e in found)

    return sorted(emails)

def extract_emails(pdf_path, use_ocr=False):
    """Main extraction function"""
    if use_ocr:
        return extract_with_ocr(pdf_path)
    return extract_from_digital_pdf(pdf_path)

def batch_extract(folder_path, use_ocr=False):
    """Extract emails from all PDFs in folder"""
    all_emails = set()
    folder = Path(folder_path)

    for pdf_file in folder.glob('*.pdf'):
        try:
            emails = extract_emails(pdf_file, use_ocr)
            all_emails.update(emails)
            print(f"{pdf_file.name}: {len(emails)} emails")
        except Exception as e:
            print(f"{pdf_file.name}: Error - {e}")

    return sorted(all_emails)

if __name__ == '__main__':
    import sys
    pdf_path = sys.argv[1]
    use_ocr = '--ocr' in sys.argv
    emails = extract_emails(pdf_path, use_ocr)
    print(f"Found {len(emails)} unique emails")
    for email in emails:
        print(email)

info Об инструменте

PDF-экстрактор email разбирает PDF-файлы для поиска email-адресов. Поддерживает как цифровые PDF, так и отсканированные документы с возможностью OCR.

Ключевые особенности

  • Цифровые PDF - Быстрое извлечение через pdfplumber (5-10 страниц/сек)
  • Поддержка OCR - Tesseract OCR для отсканированных документов
  • Многостраничность - Обрабатывает документы с 100+ страницами
  • Обнаружение таблиц - Извлечение из сложных макетов
  • Пакетная обработка - Обработка целых папок
  • Поддержка паролей - Обработка зашифрованных PDF

Поддерживаемые типы PDF

  • Текстовые PDF (экспорты Word, Excel)
  • Отсканированные документы (с OCR)
  • Визитки и счета
  • Многоколоночные макеты

Требования

  • Python 3.7+
  • pdfplumber (pip install pdfplumber)
  • Для OCR: pytesseract, pdf2image, движок Tesseract

Производительность: Цифровые PDF: 5-10 стр/сек. OCR: ~1 стр/сек. Точность: 85-95% для чётких сканов.

download Скачать скрипт

Нужна полная автоматизация?

Попробуйте Postigo для автоматизированных email-кампаний с AI-персонализацией

rocket_launch Start Free Trial