Skip to main content

A more intuitive interface for working with PDFs

Project description

Natural PDF

CI

A friendly library for working with PDFs, built on top of pdfplumber.

Natural PDF lets you find and extract content from PDFs using simple code that makes sense.

Installation

pip install natural-pdf

Need OCR, semantic search, export, or AI-powered extraction? Install what you need:

pip install "natural-pdf[all]"      # Recommended feature-complete install
pip install "natural-pdf[export]"   # Export helpers only
pip install rapidocr                # Default OCR backend
pip install easyocr                 # Extra OCR backend
pip install "natural-pdf[paddle]"   # PaddleOCR stack
pip install "surya-ocr<0.15"        # Surya OCR engine
pip install python-doctr            # Doctr OCR engine

More details in the installation guide.

natural-pdf[all] is the recommended feature-complete runtime bundle for core features: the default RapidOCR engine, sentence-transformers-based semantic search, QA/extraction dependencies, YOLO layout detection, and export support. It does not install every optional backend. Extra engines such as EasyOCR, PaddleOCR, Surya, and Doctr stay opt-in, and Natural PDF will tell you what to install when you try to use something that is missing.

Check your local setup with:

npdf doctor

Quick Start

from natural_pdf import PDF

# Open a PDF
pdf = PDF('https://github.com/jsoma/natural-pdf/raw/refs/heads/main/pdfs/01-practice.pdf')
page = pdf.pages[0]

# Extract all of the text on the page
page.extract_text()

# Find elements using CSS-like selectors
heading = page.find('text:contains("Summary"):bold')

# Extract content below the heading
content = heading.below().extract_text()

# Examine all the bold text on the page
page.find_all('text:bold').show()

# Exclude parts of the page from selectors/extractors
header = page.find('text:contains("CONFIDENTIAL")').above()
footer = page.find_all('line')[-1].below()
page.add_exclusion(header)
page.add_exclusion(footer)

# Extract clean text from the page ignoring exclusions
clean_text = page.extract_text()

And as a fun bonus, page.viewer() will provide an interactive method to explore the PDF.

Key Features

Natural PDF offers a range of features for working with PDFs:

  • CSS-like Selectors: Find elements using intuitive query strings (page.find('text:bold')).
  • Spatial Navigation: Select content relative to other elements (heading.below(), element.select_until(...)).
  • Text & Table Extraction: Get clean text or structured table data, automatically handling exclusions.
  • OCR Integration: Extract text from scanned documents with RapidOCR by default, plus opt-in engines like EasyOCR, PaddleOCR, or Surya.
  • Layout Analysis: Detect document structures (titles, paragraphs, tables) using various engines (e.g., YOLO, Paddle, LLM via API).
  • Document QA: Ask natural language questions about your document's content.
  • Semantic Search: Rank pages within a PDF by semantic similarity using sentence-transformer embeddings.
  • Visual Debugging: Highlight elements and use an interactive viewer or save images to understand your selections.

Learn More

Dive deeper into the features and explore advanced usage in the Complete Documentation.

Extending Natural PDF

Natural PDF now exposes its pluggable engines through small helper functions so you rarely have to touch the core registry directly. Two handy entry points:

from natural_pdf.tables import register_table_function

def table_delim(region, *, context=None, **kwargs):
    # return a TableResult or list-of-lists
    ...

register_table_function("table_delim", table_delim)
from natural_pdf.selectors import register_selector_engine

class DebugSelectorEngine:
    def query(self, *, context, selector, options):
        ...

register_selector_engine("debug", lambda **_: DebugSelectorEngine())

Best friends

Natural PDF sits on top of a lot of fantastic tools and mdoels, some of which are:

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

natural_pdf-0.6.3.tar.gz (824.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

natural_pdf-0.6.3-py3-none-any.whl (773.6 kB view details)

Uploaded Python 3

File details

Details for the file natural_pdf-0.6.3.tar.gz.

File metadata

  • Download URL: natural_pdf-0.6.3.tar.gz
  • Upload date:
  • Size: 824.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.13

File hashes

Hashes for natural_pdf-0.6.3.tar.gz
Algorithm Hash digest
SHA256 697fe7cc9ea1823d0ae1f93d3b5e7a83c6ab3805dfbdc191fdbe35f21af19a82
MD5 b2da5367d4bf98539af59dec8cd20be4
BLAKE2b-256 6666d92a13ceb746cb8aee7a0a26095d9fd85d8976713174fb671ba468866966

See more details on using hashes here.

File details

Details for the file natural_pdf-0.6.3-py3-none-any.whl.

File metadata

  • Download URL: natural_pdf-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 773.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.13

File hashes

Hashes for natural_pdf-0.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 729c2fc1b5961ed589ccc67e8e67aaab3087ba72360982ace74a3d405d225cfa
MD5 c9db5d2c8e8be64123332b41fd540b33
BLAKE2b-256 ba2f13766ab42769d062fd2e6217177f98712b829f51bb74a69834d8df617f59

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page