3.0 KiB
70 DěleníSouboruPDF
Účel
Dělení vícestránkového PDF (hromadný sken ze skeneru Ricoh Fi-8040) na jednotlivé skupiny pacientů. Každá skupina = jeden výstupní PDF pojmenovaný podle RČ a jména pacienta z Medicus.
Spuštění
python rozdelit_pdf.py [soubor.pdf]
Bez argumentu → file dialog (výchozí složka: Ricoh Fi-8040).
Pro vývoj: TESTOVANI = True + PATH_TO_TESTFILE na začátku skriptu.
Workflow
- Vyber vstupní PDF
- UI se otevře, thumbnaily se renderují na pozadí
- OCR běží na pozadí (Tesseract → Claude Vision fallback)
- Jména a RČ se doplňují průběžně pod každou stránkou
- Po dokončení OCR se auto-detekují hranice pacientů (červené čáry)
- Ručně uprav hranice, přesuň nebo smaž stránky, otočte je
- Enter → export do Split/
Klávesnice (numerická)
| Klávesa | Akce |
|---|---|
4 / 6 |
navigace ←/→ |
7 / 9 |
skok o 4 stránky |
5 / Space |
přepni hranici pacienta před touto stránkou |
1 / 3 |
přesuň stránku doleva / doprava |
/ |
otočit CCW (counterclockwise) |
* |
otočit CW (clockwise) |
Del / . |
smaž stránku (vynech z exportu) |
Enter |
exportuj všechny skupiny |
Esc |
konec |
Funguje s NumLock ON i OFF — detekce přes keycode (97–111), ne keysym.
OCR pipeline
- Tesseract (
C:\Program Files\Tesseract-OCR\tesseract.exe, lang=ces, 144 DPI) - Regex — hledá RČ ve formátu
XXXXXX/XXXX, nebo 9–10 číslic za klíčovým slovem (CP, RC, ID…), nebo plain 9–10 číslic s validací (měsíc, den) - Medicus Firebird — lookup přes
fdb, tabulkaKAR, poleRODCIS - Fuzzy matching — 1. úroveň: záměna podobných číslic (0↔8, 1↔7, 5↔6, 6↔1, …) + vynechání/přidání číslice; 2. úroveň: kombinace dvou chyb, filtrováno checksumem
/11 - Claude Vision fallback — volá se když Tesseract nenašel RČ, nebo když Tesseract našel RČ ale Medicus říká
not_found
Cache
OCR výsledky se ukládají do {pdf_stem}_ocr_cache.json vedle vstupního PDF.
Obsahuje: rc, medicus, tesseract_text, claude_raw.
Druhé spuštění se stejným PDF je okamžité (cache se načte, OCR neběží).
Smazání cache = znovu spustí OCR.
Auto-detekce hranic
Hranice se nastaví jen tam, kde obě sousední stránky mají RČ potvrzené v Medicus (ok nebo fuzzy) a patří různým pacientům. Stránky s not_found nebo bez RČ hranici nevyvolají — brání falešným hranicím z misreadů.
Výstup
Složka: {Dropbox}/Ordinace/Dokumentace_ke_zpracování/Ricoh Fi-8040/Split/
Název souboru:
- Pokud známo RČ:
{RČ} {Příjmení}, {Jméno} split_{NNN}.pdf - Neznámý pacient:
split_{NNN}.pdf
Závislosti
PyMuPDF(fitz) — rendering, manipulace PDFpytesseract+ Tesseract OCR — primární OCRPillow— rotace, thumbnailfdb— Firebird / Medicusanthropic— Claude Vision fallbacktkinter— UI (součást Pythonu)Knihovny/najdi_medicus.py,Knihovny/najdi_dropbox.py