PDF extraction pipeline for scientific papers
Project description
acatome-extract
PDF extraction and enrichment pipeline for scientific papers. Converts PDFs into structured, searchable bundles with block-level summaries and embeddings.
Features
- Marker PDF extraction — structured block extraction with headings, tables, figures
- Fitz fallback — recursive character chunking when Marker is unavailable
- LLM enrichment — block and paper summaries via Ollama or litellm
- Embeddings — sentence-transformer embeddings for semantic search
- File watcher —
acatome-extract watchmonitors an inbox folder - Bundle format —
.acatomecompanion files for sharing pre-built extractions - CLI —
acatome-extractcommand for extract, enrich, and watch workflows
Installation
uv pip install -e .
With GPU acceleration:
uv pip install -e ".[gpu]"
Usage
from acatome_extract.pipeline import extract
bundle = extract("/path/to/paper.pdf")
CLI
# Extract (RAKE summaries included automatically, no LLM needed)
acatome-extract extract paper.pdf
acatome-extract extract --type datasheet TI_LM317.pdf # non-article types
# Enrich — embeddings only by default; add --summarize for LLM summaries
acatome-extract enrich /path/to/bundle
acatome-extract enrich --summarize /path/to/bundle # enable LLM summaries
acatome-extract enrich --summarize --skip-existing dir/ # incremental LLM pass
# Watch — extract + embed + ingest; LLM summaries off by default
acatome-extract watch ~/papers/inbox
acatome-extract watch ~/papers/inbox --summarize # enable LLM summaries
# Migrate old bundles to new summaries dict format + add RAKE
acatome-extract migrate ~/.acatome/papers
acatome-extract migrate ~/.acatome/papers --dry-run # preview changes
# Supplements
acatome-extract attach parent-slug supplement.pdf --name s1
Summaries
Extraction always generates RAKE (extractive keyword) summaries — instant, no LLM required. LLM-based summaries are opt-in via --summarize and require an Ollama or litellm-compatible model.
RAKE summaries are used as the default for search and display. To add LLM summaries later:
acatome-extract enrich --summarize --skip-existing ~/.acatome/papers
Sidecar metadata
Place a <stem>.meta.json alongside any PDF to override metadata:
{"type": "datasheet", "title": "LM317 Regulator", "author": "Texas Instruments", "year": 2022}
Supported fields: type, title, author (string or list), year, doi, abstract, journal.
Dependencies
- acatome-meta — metadata lookup and verification
- marker-pdf — structured PDF extraction
- litellm / Ollama — LLM-based enrichment
Testing
uv run python -m pytest tests/ -v
License
GPL-3.0-or-later — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file acatome_extract-0.2.0.tar.gz.
File metadata
- Download URL: acatome_extract-0.2.0.tar.gz
- Upload date:
- Size: 38.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0a4fd0053cf565f813343857bc01d1627c38a25c047fefdda37f9268f0e8438
|
|
| MD5 |
46c47e7753cab78167001d487278fdf8
|
|
| BLAKE2b-256 |
b14e635f41f18a13834e9aa08da154f2f02b948223c829c66e38e63c256736da
|
Provenance
The following attestation bundles were made for acatome_extract-0.2.0.tar.gz:
Publisher:
publish.yml on retospect/acatome-extract
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acatome_extract-0.2.0.tar.gz -
Subject digest:
d0a4fd0053cf565f813343857bc01d1627c38a25c047fefdda37f9268f0e8438 - Sigstore transparency entry: 1085410584
- Sigstore integration time:
-
Permalink:
retospect/acatome-extract@353f9c5749c7dbc72e2da4f1e5e42ecf2b3483e7 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/retospect
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@353f9c5749c7dbc72e2da4f1e5e42ecf2b3483e7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file acatome_extract-0.2.0-py3-none-any.whl.
File metadata
- Download URL: acatome_extract-0.2.0-py3-none-any.whl
- Upload date:
- Size: 32.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bae264dd22547a50adb1343e30611bb2cc386398377cedb72d42c8a0bb95a88b
|
|
| MD5 |
3e6de720987ce6373fd9510ed828290b
|
|
| BLAKE2b-256 |
7fb7da91f3e8a857bd0d787959df7d840314f35660ac8dbbece4dbae01a6aa7d
|
Provenance
The following attestation bundles were made for acatome_extract-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on retospect/acatome-extract
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
acatome_extract-0.2.0-py3-none-any.whl -
Subject digest:
bae264dd22547a50adb1343e30611bb2cc386398377cedb72d42c8a0bb95a88b - Sigstore transparency entry: 1085410652
- Sigstore integration time:
-
Permalink:
retospect/acatome-extract@353f9c5749c7dbc72e2da4f1e5e42ecf2b3483e7 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/retospect
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@353f9c5749c7dbc72e2da4f1e5e42ecf2b3483e7 -
Trigger Event:
release
-
Statement type: