import fitz # PyMuPDF import pytesseract from PIL import Image import os import re # --- NASTAVENÍ --- PATH_TO_TESSERACT = r'C:\Program Files\Tesseract-OCR\tesseract.exe' INPUT_FILE = r'u:\Dropbox\Ordinace\Dokumentace_ke_zpracování\AdobeMakeSmaller\9b79f621-30ad-4468-85fe-6f2fd76289ce.pdf' # Nastavíme Tesseract pytesseract.pytesseract.tesseract_cmd = PATH_TO_TESSERACT def debug_ocr_output(): if not os.path.exists(INPUT_FILE): print(f"Soubor nenalezen: {INPUT_FILE}") return print(f"ANALÝZA SOUBORU: {os.path.basename(INPUT_FILE)}") doc = fitz.open(INPUT_FILE) # Projdeme první stranu (RČ bývá tam) for i, page in enumerate(doc): if i > 0: break # Stačí nám 1. strana pro test print(f"\n--- STRANA {i + 1} (300 DPI) ---") # 1. Renderování ve vysoké kvalitě (stejně jako v 'Ultimate' skriptu) # Pokud je sken nekvalitní, Tesseract potřebuje velké rozlišení zoom = 300 / 72 matrix = fitz.Matrix(zoom, zoom) pix = page.get_pixmap(matrix=matrix, colorspace=fitz.csGRAY) img = Image.frombytes("L", [pix.width, pix.height], pix.samples) # 2. OCR - Získání surového textu # config='--psm 3' je standardní automatická segmentace stránky raw_text = pytesseract.image_to_string(img, lang='ces', config='--psm 3') print(">>> SUROVÝ TEXT Z TESSERACTU (ZAČÁTEK) <<<") print("-" * 50) print(raw_text) print("-" * 50) print(">>> SUROVÝ TEXT Z TESSERACTU (KONEC) <<<") # 3. Test Regexu na tomto textu print("\n--- TEST HLEDÁNÍ RČ ---") # Standardní Regex strict_pattern = r'\b\d{6}\s*[\/]?\s*\d{3,4}\b' strict_matches = re.findall(strict_pattern, raw_text) print(f"Přísný filtr (očekává jen čísla): {strict_matches}") # Volnější Regex (hledá i chyby OCR jako 'O' místo '0' nebo 'l' místo '1') # \d -> číslice # [O0] -> nula nebo O # [lI1] -> jednička, malé L nebo velké i loose_pattern = r'\b[0-9O]{6}\s*[\/ilI1]?\s*[0-9O]{3,4}\b' loose_matches = re.findall(loose_pattern, raw_text) if loose_matches and not strict_matches: print(f"⚠️ POZOR: Našel jsem RČ jen pomocí volného filtru (obsahuje překlepy OCR): {loose_matches}") print(" -> Bude potřeba upravit čistící funkci.") if __name__ == "__main__": debug_ocr_output()