This commit is contained in:
2026-05-31 16:16:51 +07:00
commit 41823dcbf8
4 changed files with 468 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
# pdf2ai
Model-free конвертер PDF → markdown для локального агента: главы по разделам, картинки рядом, grep по `<!-- page N -->`.
## Зависимости
- Python **3.10+**
- pip-пакеты из [`requirements.txt`](requirements.txt): `pymupdf`, `pdfplumber`, `Pillow`
Скрипт [`run.sh`](run.sh) сам создаёт `.venv` и ставит зависимости.
## Быстрый старт
```bash
chmod +x run.sh
./run.sh # по умолчанию RealTek-r8169.pdf
./run.sh path/to/doc.pdf # свой PDF
./run.sh doc.pdf -o out/my-doc # свой каталог вывода
```
Структура вывода `out/<stem>/` (по умолчанию):
```
out/RealTek-r8169/
├── INDEX.md # оглавление со ссылками на главы
├── chapters/ # одна глава = один файл
│ ├── 01-features.md
│ └── ...
└── assets/ # embedded PNG + page PNG для сломанных layout-страниц
```
С флагом `--single-file` вместо `INDEX.md` и `chapters/` пишется один `{stem}.md` (каталог `assets/` всё равно создаётся).
### Опции extract.py
| Флаг | Описание |
|------|----------|
| `--single-file` | Один `{stem}.md` вместо `INDEX.md` + `chapters/` |
| `--tables` | Включить извлечение таблиц pdfplumber (по умолчанию выключено) |
| `--page-dpi N` | DPI для PNG-рендера страниц с битым текстом (default 150) |
| `-o DIR` | Каталог вывода |
## Grep для агента
Главы разбиты по крупным разделам документа. Каждая страница помечена HTML-комментарием:
```bash
# найти упоминание регистра в главе 6
rg -n 'DTCCR' out/RealTek-r8169/chapters/06-register-descriptions.md
# все вхождения по всему документу
rg -n 'Interrupt Mask' out/RealTek-r8169/
# контекст вокруг страницы 51
rg -n -C3 'page 51' out/RealTek-r8169/chapters/09-functional-description.md
```
Начните с [`INDEX.md`](out/RealTek-r8169/INDEX.md) — там ссылки на все главы.
## Ограничения (model-free)
Этот инструмент **не использует LLM/VLM**. Он комбинирует:
- PyMuPDF — текст страниц и embedded-изображения
- pdfplumber — опциональные таблицы (`--tables`)
- эвристику «сломанной страницы» — PNG-рендер bitfield/diagram layout
**Что хорошо:** быстро, локально, детерминированно; grep по главам; картинки сохраняются рядом.
**Что хуже, чем Marker/Docling:** сложная вёрстка, multi-column, сканы без OCR, семантическая структура таблиц. Для таких PDF нужны модельные конвертеры или OCR.
## Roadmap
См. [`plan.md`](plan.md).