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 — установка и первое извлечение