PDF Oxide vs pdfplumber
PDF Oxide видобуває текст у 29 разів швидше за pdfplumber, водночас пропонуючи ширший набір можливостей. Натомість pdfplumber має зріліші алгоритми видобування таблиць. Ця сторінка допоможе вам обрати правильний інструмент під вашу задачу.
Ключові відмінності
Швидкість. pdfplumber написаний на чистому Python (на основі pdfminer). Ядро PDF Oxide на Rust видобуває текст у середньому за 0,8 мс проти 23,2 мс — у 29 разів швидше.
Надійність. PDF Oxide успішно проходить 100% із 3830 тестових PDF. Показник pdfplumber — 98,8%, тобто 46 збоїв на коректних PDF.
Таблиці. pdfplumber має найкраще видобування таблиць серед усіх Python-бібліотек для PDF. Виявлення таблиць у PDF Oxide робоче, але менш зріле для складних макетів із багатьма рядками й стовпцями та об’єднаними клітинками.
Охоплення. pdfplumber працює лише на читання. PDF Oxide додає створення, редагування, шифрування, рендеринг і виведення у Markdown/HTML.
Швидке порівняння
| PDF Oxide | pdfplumber | |
|---|---|---|
| Середній час видобування | 0,8 мс | 23,2 мс |
| Частка успішних (3830 PDF) | 100% | 98,8% |
| Ліцензія | MIT | MIT |
| Мова | Rust + PyO3 | Чистий Python |
| Видобування тексту | Так | Так |
| Позиції символів | Так | Так |
| Видобування таблиць | Базове | Розширене |
| Видобування зображень | Так | Ні |
| Візуальне налагодження | Ні | Так |
| Виведення у Markdown | Так | Ні |
| Виведення у HTML | Так | Ні |
| Створення PDF | Так | Ні |
| Редагування PDF | Так | Ні |
| Шифрування | Читання + запис | Ні |
| Рендеринг | Так | Ні |
| Поля форм | Читання + запис | Лише читання |
Паралельне порівняння коду
Видобування тексту
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)
pdfplumber:
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
page = pdf.pages[0]
text = page.extract_text()
print(text)
Видобування на рівні символів
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("report.pdf")
chars = doc.extract_chars(0)
for ch in chars[:10]:
print(f"'{ch.char}' at ({ch.x:.1f}, {ch.y:.1f}) size={ch.font_size:.1f}")
pdfplumber:
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
page = pdf.pages[0]
for char in page.chars[:10]:
print(f"'{char['text']}' at ({char['x0']:.1f}, {char['top']:.1f}) "
f"size={char['size']:.1f}")
Видобування таблиць
PDF Oxide:
from pdf_oxide import PdfDocument
doc = PdfDocument("invoice.pdf")
md = doc.to_markdown(0, detect_headings=True)
# Tables are converted to Markdown table syntax
print(md)
pdfplumber:
import pdfplumber
with pdfplumber.open("invoice.pdf") as pdf:
page = pdf.pages[0]
tables = page.extract_tables()
for table in tables:
for row in table:
print(row)
extract_tables() у pdfplumber повертає структуровані дані рядків/стовпців із налаштовуваним виявленням ліній. Для складних таблиць із об’єднаними клітинками, заголовками, що охоплюють кілька стовпців, або макетами без рамок алгоритми pdfplumber надійніші.
Деталі бенчмарка
| Метрика | PDF Oxide | pdfplumber |
|---|---|---|
| Середній час видобування | 0,8 мс | 23,2 мс |
| Час видобування p99 | 9 мс | 189 мс |
| Частка успішних (коректні PDF) | 100% (3823/3823) | 98,8% (3777/3823) |
Різниця у швидкості в 29 разів зумовлена суто Python-архітектурою pdfplumber. pdfplumber спирається на pdfminer для парсингу, а потім додає власний шар просторового аналізу — обидва написані на Python. PDF Oxide виконує весь парсинг, декодування шрифтів і складання тексту у скомпільованому Rust.
Див. повну методологію бенчмарка щодо деталей корпусу.
Коли що обирати
Обирайте PDF Oxide, якщо:
- Важлива швидкість. Обробка тисяч PDF, де у 29 разів швидше означає хвилини замість годин.
- Вам потрібно більше, ніж видобування. Створення, редагування, шифрування, рендеринг або виведення у Markdown.
- Ви прагнете максимальної надійності. 100% успішних перевірок проти 98,8%.
- Вам потрібне видобування зображень. pdfplumber не видобуває зображення.
- Конвеєри пакетної обробки. 0,8 мс на PDF означає 3830 PDF за 3,1 секунди.
Обирайте pdfplumber, якщо:
- Складне видобування таблиць — ваш основний сценарій. Алгоритми таблиць pdfplumber краще опрацьовують об’єднані клітинки, таблиці без рамок і заголовки, що охоплюють стовпці.
- Вам потрібне візуальне налагодження. pdfplumber може рендерити анотовані зображення сторінок, показуючи виявлені лінії, символи та межі таблиць.
- Ви надаєте перевагу чистому Python. Жодних скомпільованих залежностей, встановлюється будь-де.
Використовуйте обидва:
Для конвеєрів, яким потрібне і швидке видобування тексту, і розбір складних таблиць, використовуйте PDF Oxide для тексту й pdfplumber для таблиць:
from pdf_oxide import PdfDocument
import pdfplumber
# Fast text extraction with PDF Oxide
doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
# Complex table extraction with pdfplumber
with pdfplumber.open("report.pdf") as pdf:
tables = pdf.pages[0].extract_tables()
Пов’язані сторінки
- Бенчмарки продуктивності — повні результати по корпусу
- vs Python-бібліотеки для PDF — порівняння всіх Python-бібліотек
- Видобування таблиць із PDF — посібник із видобування таблиць
- Початок роботи з Python — встановлення та перше видобування