paperless_to_openwebui.py aktualisiert

This commit is contained in:
2026-06-25 16:10:13 +02:00
parent fdc655541a
commit bd72b1d6d2
+67 -67
View File
@@ -876,74 +876,74 @@ def wait_for_openwebui():
log.info("Not ready yet, retrying in 10s...") log.info("Not ready yet, retrying in 10s...")
time.sleep(10) time.sleep(10)
def ocr_fix_only_pass(): def ocr_fix_only_pass():
""" """
Geht alle Paperless-Dokumente durch und korrigiert nur den OCR-Text. Geht alle Paperless-Dokumente durch und korrigiert nur den OCR-Text.
Kein Upload nach OpenWebUI das erledigt der nächste reguläre Sync. Kein Upload nach OpenWebUI das erledigt der nächste reguläre Sync.
""" """
log.info("=== OCR FIX ONLY MODE ===") log.info("=== OCR FIX ONLY MODE ===")
log.info("Fetching all documents from Paperless...") log.info("Fetching all documents from Paperless...")
docs = [] docs = []
page = 1 page = 1
while True: while True:
url = f"{PAPERLESS_URL}/api/documents/?page_size=100&page={page}" url = f"{PAPERLESS_URL}/api/documents/?page_size=100&page={page}"
r = requests.get(url, headers=paperless_headers, timeout=120) r = requests.get(url, headers=paperless_headers, timeout=120)
r.raise_for_status() r.raise_for_status()
data = r.json() data = r.json()
results = data.get("results", []) results = data.get("results", [])
if not results: if not results:
break break
docs.extend(results) docs.extend(results)
if not data.get("next"): if not data.get("next"):
break break
page += 1 page += 1
total = len(docs) total = len(docs)
log.info("Found %s documents to check.", total) log.info("Found %s documents to check.", total)
fixed = 0 fixed = 0
skipped = 0 skipped = 0
errors = 0 errors = 0
for i, doc in enumerate(docs): for i, doc in enumerate(docs):
doc_id = doc["id"] doc_id = doc["id"]
title = doc.get("title", f"doc_{doc_id}") title = doc.get("title", f"doc_{doc_id}")
content = doc.get("content", "") content = doc.get("content", "")
if not content or len(content.strip()) < 50: if not content or len(content.strip()) < 50:
skipped += 1 skipped += 1
continue continue
if not needs_ocr_fix(content): if not needs_ocr_fix(content):
skipped += 1 skipped += 1
if (i + 1) % 100 == 0: if (i + 1) % 100 == 0:
log.info(" Progress: %d/%d (fixed=%d, skipped=%d)", log.info(" Progress: %d/%d (fixed=%d, skipped=%d)",
i + 1, total, fixed, skipped) i + 1, total, fixed, skipped)
continue continue
log.info("OCR fix needed: #%s '%s'", doc_id, title) log.info("OCR fix needed: #%s '%s'", doc_id, title)
try: try:
fixed_text = fix_ocr_chunked(content) fixed_text = fix_ocr_chunked(content)
if fixed_text and fixed_text != content: if fixed_text and fixed_text != content:
if update_paperless_content(doc_id, fixed_text): if update_paperless_content(doc_id, fixed_text):
fixed += 1 fixed += 1
log.info(" ✓ Fixed #%s (delta: %+d chars)", log.info(" ✓ Fixed #%s (delta: %+d chars)",
doc_id, len(fixed_text) - len(content)) doc_id, len(fixed_text) - len(content))
else:
errors += 1
else: else:
skipped += 1 errors += 1
log.debug(" No changes for #%s", doc_id) else:
except Exception as e: skipped += 1
log.error(" ✗ Error fixing #%s: %s", doc_id, e) log.debug(" No changes for #%s", doc_id)
errors += 1 except Exception as e:
log.error(" ✗ Error fixing #%s: %s", doc_id, e)
log.info("=== OCR FIX COMPLETE ===") errors += 1
log.info(" Total: %d", total)
log.info(" Fixed: %d", fixed) log.info("=== OCR FIX COMPLETE ===")
log.info(" Skipped: %d", skipped) log.info(" Total: %d", total)
log.info(" Errors: %d", errors) log.info(" Fixed: %d", fixed)
log.info(" Skipped: %d", skipped)
log.info(" Errors: %d", errors)
# ============================================================ # ============================================================
# MAIN # MAIN