From 70c7fe1da02c7869736e6f1923cf55f059e35a20 Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 10 Apr 2025 09:52:58 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 50 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 8c6da77f..0f9d1ccd 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -534,15 +534,16 @@ class DataProcessor: def process_verification_only(): """ Überarbeiteter Batch‑Prozess (Modus 51): - - Fragt zunächst in der Konsole ab, wie viele Zeilen insgesamt verarbeitet werden sollen. - - Teilt die zu verarbeitenden Zeilen in Pakete der Größe Config.BATCH_SIZE (z. B. 10 Zeilen). - - Für jedes Batch wird ein aggregierter Prompt erstellt, an ChatGPT gesendet und die Antwort + - Fragt in der Konsole ab, wie viele Zeilen insgesamt verarbeitet werden sollen. + - Alle Zeilen, bei denen Spalte AO (Index 40) leer ist (oder die Spaltenanzahl < 41 beträgt), werden verarbeitet. + - Die zu verarbeitenden Zeilen werden in Paketen der Größe Config.BATCH_SIZE (z. B. 10 Zeilen) gebündelt. + - Für jedes Batch wird ein aggregierter Prompt erstellt, an ChatGPT gesendet und die aggregierte Antwort zeilenweise geparst. - Die Ergebnisse werden in den Spalten S bis Y geschrieben: S: Wiki-Validierung (z. B. "OK" oder "X") T: Alternativer Wiki-Artikel (URL oder "Kein Wikipedia-Eintrag vorhanden.") U: Wiki-Erklärung / Begründung - V, W, X, Y: Platzhalter (aktuell leer) + V, W, X, Y: Platzhalter (leer) - Umfassendes Logging informiert über Batch, Zeilennummern, Token-Zahl etc. """ debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess...") @@ -559,33 +560,33 @@ def process_verification_only(): main_sheet = sh.sheet1 data = main_sheet.get_all_values() - # Begrenze die Verarbeitung, falls total_rows gesetzt ist + # Definiere die Anzahl der zu verarbeitenden Zeilen. available_rows = len(data) - 1 # ohne Header if total_rows is not None and total_rows < available_rows: available_rows = total_rows - batch_size = Config.BATCH_SIZE # z. B. 10, anpassbar in der Config + batch_size = Config.BATCH_SIZE # z. B. 10, einstellbar in der Config batches = [] row_numbers = [] + # VERARBEITE JEDEN Datensatz, bei dem entweder nicht mindestens 41 Spalten existieren oder Spalte AO leer ist. for i, row in enumerate(data[1:], start=2): - if i > available_rows + 1: # plus Header-Zeile + if i > available_rows + 1: break - # Überspringe Zeilen, in denen in Spalte AO (Index 40) bereits ein Wert steht - if len(row) > 40 and row[40].strip() != "": + # Überspringe Zeilen, bei denen Spalte AO (Index 40) bereits gefüllt ist. + if len(row) >= 41 and row[40].strip() != "": continue - # Hier wird angenommen, dass relevante Daten in mindestens 25 Spalten vorhanden sind. - if len(row) <= 25 or row[24].strip() == "": - entry_text = ( - f"Eintrag {i}:\n" - f"Firmenname: {row[1] if len(row)>1 else ''}\n" - f"CRM-Beschreibung: {row[7] if len(row)>7 else ''}\n" - f"Wikipedia-URL: {row[11] if len(row)>11 and row[11].strip() not in ['', 'k.A.'] else 'k.A.'}\n" - f"Wiki-Absatz: {row[12] if len(row)>12 else 'k.A.'}\n" - f"Wiki-Kategorien: {row[16] if len(row)>16 else 'k.A.'}\n" - "-----\n" - ) - batches.append(entry_text) - row_numbers.append(i) + # Nehme die Zeile in den Batch auf. + entry_text = ( + f"Eintrag {i}:\n" + f"Firmenname: {row[1] if len(row) > 1 else ''}\n" + f"CRM-Beschreibung: {row[7] if len(row) > 7 else ''}\n" + f"Wikipedia-URL: {row[11] if len(row) > 11 and row[11].strip() not in ['', 'k.A.'] else 'k.A.'}\n" + f"Wiki-Absatz: {row[12] if len(row) > 12 else 'k.A.'}\n" + f"Wiki-Kategorien: {row[16] if len(row) > 16 else 'k.A.'}\n" + "-----\n" + ) + batches.append(entry_text) + row_numbers.append(i) if len(batches) == batch_size: aggregated_prompt = ( "Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. " @@ -626,9 +627,6 @@ def process_verification_only(): debug_print(f"Fehler bei der ChatGPT-Anfrage für Batch {row_numbers[0]}-{row_numbers[-1]}: {e}") result = "" answers = result.split("\n") - # Nun werden für jede Zeile des Batches die folgenden Spalten aktualisiert: - # S: Wiki-Validierung, T: Alternativer Wiki-Artikel, U: Wiki-Erklärung, - # V, W, X, Y: Platzhalter (leer) for current_row in row_numbers: answer = "k.A." for line in answers: @@ -656,7 +654,7 @@ def process_verification_only(): main_sheet.update(values=[[wiki_confirm]], range_name=f"S{current_row}") main_sheet.update(values=[[alt_article]], range_name=f"T{current_row}") main_sheet.update(values=[[wiki_explanation]], range_name=f"U{current_row}") - # Die Spalten V, W, X, Y werden als leere Strings gesetzt + # Setze die Spalten V bis Y (Platzhalter) auf leere Strings main_sheet.update(values=[["", "", "", ""]], range_name=f"V{current_row}:Y{current_row}") debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}") except Exception as e: