67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
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\6ed31e44-0e7d-4118-8912-c3e583781459.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() |