From 9f467d3204b3fa1ebb3347977cb4045f0b5ca348 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 25 Jun 2026 15:57:27 +0200 Subject: [PATCH] paperless_to_openwebui.py aktualisiert --- paperless_to_openwebui.py | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/paperless_to_openwebui.py b/paperless_to_openwebui.py index 893c386..2e4af21 100644 --- a/paperless_to_openwebui.py +++ b/paperless_to_openwebui.py @@ -582,14 +582,25 @@ Regeln: - 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: - """Schneller Vorfilter: Hat der Text gesperrte Zeichen?""" + """Schneller Vorfilter: Hat der Text gesperrte Zeichen oder OCR-Artefakte?""" if not text or len(text) < 50: return False + # ── Check 1: Gesperrter Text (Leerzeichen zwischen Buchstaben) ── lines = text.split('\n') spaced_lines = 0 - for line in lines: stripped = line.strip() if len(stripped) < 5: @@ -600,7 +611,23 @@ def needs_ocr_fix(text: str) -> bool: if ratio > SPACING_THRESHOLD: 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: