📄 pdf2seg
Tokenizer-free PDF segmentation using OCR and span-aware text chunking.
pdf2seg processes scanned or embedded-text PDFs using EasyOCR and spaCy, segmenting raw text into semantically relevant spans—no tokenizers, sentence splitters, or fixed rules required.
🚀 Features
- Tokenizer-Free Chunking – no subword vocabularies or fragile heuristics
- OCR-Agnostic – supports scanned PDFs with diagrams, math, or multilingual text
- Span-Aware Segmentation – uses spaCy syntax and entropy-minimized sampling
- Checkpointing & Resume Support – deterministic processing saved to
hash.json - Rich Console UI – interactive UV-style bars powered by
rich
📦 Installation
Install from PyPI:
pip install pdf2seg
Or with UV:
uv pip install pdf2seg
🧪 Quick Usage
pdf2seg -i paper.pdf -o data/
📁 Output:
data/
|── <hash>/
| |── <hash>-p000.png ← rendered page
| |── <hash>-p000.txt ← OCR result
| |── <hash>.json ← processing manifest
|── <hash>.csv ← segmented spans
🧬 Internals
Under the hood, pdf2seg performs:
- PDF-to-image conversion (
pdf2image) - OCR with
easyocr - Sentence splitting + span grouping with
spacy - Filtering + export to CSV
- Manifest updates for resumability
You can inspect the span cutoff logic, filters, or tweak the entropy mode in __init__.py.
🧩 Future Plans
- Modality tagging (code vs prose vs formulae)
- Math-aware OCR fallback (e.g. Im2LaTeX)
- Stream-aware recomposition
- Standalone
hash-viewerweb demo
🔖 License
MIT License © 2025 Rawson, Kara
Project: p3nGu1nZz/pdf2seg
If you use or reference this software in an academic publication or project, please consider citing it using the following BibTeX entry:
@software{rawson2025pdf2seg,
author = {Rawson, Kara},
title = {pdf2seg: Tokenizer-Free PDF Segmentation with OCR and Span-Aware Chunking},
year = {2025},
version = {1.0.1},
url = {https://github.com/p3nGu1nZz/pdf2seg},
note = {Python package available at PyPI: https://pypi.org/project/pdf2seg/}
}
👁 See Also
- X-Spanformer: Tokenizer-Free Span Induction with Structural Fusion
- oxbar: Compile structured span labels with local LLMs
Metadata
Release files for pdf2seg 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pdf2seg-1.0.2.tar.gz | 6.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pdf2seg-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.5 kB
Release files / pdf2seg-1.0.2.tar.gz
| Download URL | pdf2seg-1.0.2.tar.gz |
|---|---|
| Size | 6.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
786a345acb52bcdc697ace69c46a24409478f43cc1cb70ead7e26106569b2759
|
|
BLAKE2b-256 checksum How to use checksums |
3cf354be42c164aba03573e3e1526f7bafdb0d346cae9e9743dae53e77be30b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.2
|
Release files / pdf2seg-1.0.2-py3-none-any.whl
| Download URL | pdf2seg-1.0.2-py3-none-any.whl |
|---|---|
| Size | 6.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7cd911182ce507326596879015c5a2fddf8269be1a304992350e139de24ab713
|
|
BLAKE2b-256 checksum How to use checksums |
737765cd1637926f7e07dc17a222f5ee80a527aa6c14141e0690256f6d9911b8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.2
|