From bd72b1d6d23d7ad759991d10bc468e6521d585ed Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 25 Jun 2026 16:10:13 +0200 Subject: [PATCH] paperless_to_openwebui.py aktualisiert --- paperless_to_openwebui.py | 134 +++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/paperless_to_openwebui.py b/paperless_to_openwebui.py index 83878c5..e0a517c 100644 --- a/paperless_to_openwebui.py +++ b/paperless_to_openwebui.py @@ -876,74 +876,74 @@ def wait_for_openwebui(): log.info("Not ready yet, retrying in 10s...") time.sleep(10) - def ocr_fix_only_pass(): - """ - Geht alle Paperless-Dokumente durch und korrigiert nur den OCR-Text. - Kein Upload nach OpenWebUI – das erledigt der nächste reguläre Sync. - """ - log.info("=== OCR FIX ONLY MODE ===") - log.info("Fetching all documents from Paperless...") - - docs = [] - page = 1 - while True: - url = f"{PAPERLESS_URL}/api/documents/?page_size=100&page={page}" - r = requests.get(url, headers=paperless_headers, timeout=120) - r.raise_for_status() - data = r.json() - results = data.get("results", []) - if not results: - break - docs.extend(results) - if not data.get("next"): - break - page += 1 - - total = len(docs) - log.info("Found %s documents to check.", total) - - fixed = 0 - skipped = 0 - errors = 0 - - for i, doc in enumerate(docs): - doc_id = doc["id"] - title = doc.get("title", f"doc_{doc_id}") - content = doc.get("content", "") - - if not content or len(content.strip()) < 50: - skipped += 1 - continue - - if not needs_ocr_fix(content): - skipped += 1 - if (i + 1) % 100 == 0: - log.info(" Progress: %d/%d (fixed=%d, skipped=%d)", - i + 1, total, fixed, skipped) - continue - - log.info("OCR fix needed: #%s '%s'", doc_id, title) - try: - fixed_text = fix_ocr_chunked(content) - if fixed_text and fixed_text != content: - if update_paperless_content(doc_id, fixed_text): - fixed += 1 - log.info(" ✓ Fixed #%s (delta: %+d chars)", - doc_id, len(fixed_text) - len(content)) - else: - errors += 1 +def ocr_fix_only_pass(): + """ + Geht alle Paperless-Dokumente durch und korrigiert nur den OCR-Text. + Kein Upload nach OpenWebUI – das erledigt der nächste reguläre Sync. + """ + log.info("=== OCR FIX ONLY MODE ===") + log.info("Fetching all documents from Paperless...") + + docs = [] + page = 1 + while True: + url = f"{PAPERLESS_URL}/api/documents/?page_size=100&page={page}" + r = requests.get(url, headers=paperless_headers, timeout=120) + r.raise_for_status() + data = r.json() + results = data.get("results", []) + if not results: + break + docs.extend(results) + if not data.get("next"): + break + page += 1 + + total = len(docs) + log.info("Found %s documents to check.", total) + + fixed = 0 + skipped = 0 + errors = 0 + + for i, doc in enumerate(docs): + doc_id = doc["id"] + title = doc.get("title", f"doc_{doc_id}") + content = doc.get("content", "") + + if not content or len(content.strip()) < 50: + skipped += 1 + continue + + if not needs_ocr_fix(content): + skipped += 1 + if (i + 1) % 100 == 0: + log.info(" Progress: %d/%d (fixed=%d, skipped=%d)", + i + 1, total, fixed, skipped) + continue + + log.info("OCR fix needed: #%s '%s'", doc_id, title) + try: + fixed_text = fix_ocr_chunked(content) + if fixed_text and fixed_text != content: + if update_paperless_content(doc_id, fixed_text): + fixed += 1 + log.info(" ✓ Fixed #%s (delta: %+d chars)", + doc_id, len(fixed_text) - len(content)) else: - skipped += 1 - log.debug(" No changes for #%s", doc_id) - except Exception as e: - log.error(" ✗ Error fixing #%s: %s", doc_id, e) - errors += 1 - - log.info("=== OCR FIX COMPLETE ===") - log.info(" Total: %d", total) - log.info(" Fixed: %d", fixed) - log.info(" Skipped: %d", skipped) - log.info(" Errors: %d", errors) + errors += 1 + else: + skipped += 1 + log.debug(" No changes for #%s", doc_id) + except Exception as e: + log.error(" ✗ Error fixing #%s: %s", doc_id, e) + errors += 1 + + log.info("=== OCR FIX COMPLETE ===") + log.info(" Total: %d", total) + log.info(" Fixed: %d", fixed) + log.info(" Skipped: %d", skipped) + log.info(" Errors: %d", errors) # ============================================================ # MAIN