paperless_to_openwebui.py aktualisiert
This commit is contained in:
+67
-67
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user