paperless_to_openwebui.py aktualisiert
This commit is contained in:
@@ -582,14 +582,25 @@ Regeln:
|
|||||||
- Gib NUR den korrigierten Text zurück, keine Erklärungen"""
|
- Gib NUR den korrigierten Text zurück, keine Erklärungen"""
|
||||||
|
|
||||||
|
|
||||||
|
# Typische OCR-Artefakte die in deutschen/englischen Texten nicht vorkommen
|
||||||
|
OCR_ARTIFACT_CHARS = set("ÿšžřťňďľščžŕůúýáíéóôąęśćżźñ")
|
||||||
|
# Noch aggressiver: Zeichen die fast nie in DE/EN-Dokumenten auftauchen
|
||||||
|
OCR_SUSPECT_PATTERNS = [
|
||||||
|
"fi", "fl", "ff", "ffi", "ffl", # Ligaturen die OCR manchmal erzeugt
|
||||||
|
"†", "‡", # Oft falsch erkannte Sonderzeichen
|
||||||
|
"\u00ad", # Soft-Hyphen (unsichtbar, aber stört Suche)
|
||||||
|
"¬", # Oft falscher Zeilenumbruch-Marker
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def needs_ocr_fix(text: str) -> bool:
|
def needs_ocr_fix(text: str) -> bool:
|
||||||
"""Schneller Vorfilter: Hat der Text gesperrte Zeichen?"""
|
"""Schneller Vorfilter: Hat der Text gesperrte Zeichen oder OCR-Artefakte?"""
|
||||||
if not text or len(text) < 50:
|
if not text or len(text) < 50:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# ── Check 1: Gesperrter Text (Leerzeichen zwischen Buchstaben) ──
|
||||||
lines = text.split('\n')
|
lines = text.split('\n')
|
||||||
spaced_lines = 0
|
spaced_lines = 0
|
||||||
|
|
||||||
for line in lines:
|
for line in lines:
|
||||||
stripped = line.strip()
|
stripped = line.strip()
|
||||||
if len(stripped) < 5:
|
if len(stripped) < 5:
|
||||||
@@ -600,7 +611,23 @@ def needs_ocr_fix(text: str) -> bool:
|
|||||||
if ratio > SPACING_THRESHOLD:
|
if ratio > SPACING_THRESHOLD:
|
||||||
spaced_lines += 1
|
spaced_lines += 1
|
||||||
|
|
||||||
return spaced_lines >= MIN_SPACED_LINES
|
if spaced_lines >= MIN_SPACED_LINES:
|
||||||
|
log.debug(" → Spacing-Artefakte erkannt (%d Zeilen)", spaced_lines)
|
||||||
|
return True
|
||||||
|
|
||||||
|
# ── Check 2: Fremdzeichen die in DE/EN nicht vorkommen ──
|
||||||
|
artifact_count = sum(1 for ch in text if ch in OCR_ARTIFACT_CHARS)
|
||||||
|
if artifact_count > 3: # Mehr als 3 solcher Zeichen = verdächtig
|
||||||
|
log.debug(" → OCR-Artefakt-Zeichen erkannt (%d Stück)", artifact_count)
|
||||||
|
return True
|
||||||
|
|
||||||
|
# ── Check 3: Verdächtige Patterns ──
|
||||||
|
suspect_count = sum(text.count(p) for p in OCR_SUSPECT_PATTERNS)
|
||||||
|
if suspect_count > 5:
|
||||||
|
log.debug(" → Verdächtige OCR-Patterns erkannt (%d Stück)", suspect_count)
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def fix_text_with_llm(text: str) -> str:
|
def fix_text_with_llm(text: str) -> str:
|
||||||
|
|||||||
Reference in New Issue
Block a user