From 5678dd76a1181fbc188fa0b35be1c176b030a515 Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 10 Apr 2025 09:39:46 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 62 +++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index eb5b91fe..8c6da77f 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -534,27 +534,46 @@ class DataProcessor: def process_verification_only(): """ Überarbeiteter Batch‑Prozess (Modus 51): - - Alle zu verifizierenden 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 und an ChatGPT gesendet. - - Die aggregierte Antwort wird zeilenweise geparst und auf die jeweiligen Zeilen (Google Sheet) aktualisiert. - - Umfassende Log‑Ausgaben informieren über den aktuellen Batch, Zeilennummern und Token-Zahlen. + - 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 + 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) + - Umfassendes Logging informiert über Batch, Zeilennummern, Token-Zahl etc. """ debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess...") - # Ermittelt alle Zeilen, die noch keine ChatGPT-Auswertung (in Spalte AO) haben + # Abfrage: Wie viele Zeilen sollen insgesamt verarbeitet werden? + try: + total_rows = int(input("Wie viele Zeilen sollen insgesamt bearbeitet werden? ")) + except Exception as e: + debug_print(f"Fehler bei der Eingabe der Zeilenanzahl: {e}. Es werden alle verfügbaren Zeilen verarbeitet.") + total_rows = None + gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name( Config.CREDENTIALS_FILE, ["https://www.googleapis.com/auth/spreadsheets"])) sh = gc.open_by_url(Config.SHEET_URL) main_sheet = sh.sheet1 data = main_sheet.get_all_values() - + + # Begrenze die Verarbeitung, falls total_rows gesetzt ist + 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 batches = [] row_numbers = [] for i, row in enumerate(data[1:], start=2): + if i > available_rows + 1: # plus Header-Zeile + break # Überspringe Zeilen, in denen in Spalte AO (Index 40) bereits ein Wert steht if len(row) > 40 and row[40].strip() != "": continue - # Wir erwarten relevante Daten in mindestens 25 Spalten (anpassbar, je nachdem) + # 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" @@ -567,7 +586,6 @@ def process_verification_only(): ) batches.append(entry_text) row_numbers.append(i) - # Wenn wir die Batchgröße erreicht haben, verarbeite diesen Batch if len(batches) == batch_size: aggregated_prompt = ( "Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. " @@ -581,7 +599,6 @@ def process_verification_only(): ) aggregated_prompt += "\n".join(batches) debug_print(f"Verarbeite Batch für Zeilen {row_numbers[0]} bis {row_numbers[-1]}.") - # Optional: Logge Token-Zahl des Prompts agg_token_count = "n.v." if tiktoken: try: @@ -606,11 +623,12 @@ def process_verification_only(): result = response.choices[0].message.content.strip() debug_print(f"Aggregierte Antwort für Batch {row_numbers[0]}-{row_numbers[-1]}: {result}") except Exception as e: - debug_print(f"Fehler bei der ChatGPT Anfrage für Batch {row_numbers[0]}-{row_numbers[-1]}: {e}") - # Leere Antwort, sodass wir die Batch-Ergebnisse nicht aktualisieren + debug_print(f"Fehler bei der ChatGPT-Anfrage für Batch {row_numbers[0]}-{row_numbers[-1]}: {e}") result = "" answers = result.split("\n") - # Update pro Zeile des aktuellen Batches anhand der aggregierten Antwort + # 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: @@ -634,24 +652,23 @@ def process_verification_only(): wiki_confirm = "" alt_article = answer wiki_explanation = answer - try: main_sheet.update(values=[[wiki_confirm]], range_name=f"S{current_row}") - main_sheet.update(values=[[alt_article]], range_name=f"U{current_row}") - main_sheet.update(values=[[wiki_explanation]], range_name=f"V{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 + 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: debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}") time.sleep(Config.RETRY_DELAY) - # Nach Bearbeitung eines Batches zurücksetzen batches = [] row_numbers = [] - # Falls nach Schleifendurchlauf noch ein unvollständiges Batch übrig ist if batches: aggregated_prompt = ( "Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. " "Für jeden der folgenden Einträge prüfe, ob der vorhandene Wikipedia-Artikel plausibel passt. " - "Gib das Ergebnis im Format:\n" + "Gib das Ergebnis im Format aus:\n" "Eintrag : \n\n" ) aggregated_prompt += "\n".join(batches) @@ -680,7 +697,7 @@ def process_verification_only(): result = response.choices[0].message.content.strip() debug_print(f"Aggregierte Antwort für letztes Batch: {result}") except Exception as e: - debug_print(f"Fehler bei der ChatGPT Anfrage für letztes Batch: {e}") + debug_print(f"Fehler bei der ChatGPT-Anfrage für letztes Batch: {e}") result = "" answers = result.split("\n") for current_row in row_numbers: @@ -706,18 +723,17 @@ def process_verification_only(): wiki_confirm = "" alt_article = answer wiki_explanation = answer - try: main_sheet.update(values=[[wiki_confirm]], range_name=f"S{current_row}") - main_sheet.update(values=[[alt_article]], range_name=f"U{current_row}") - main_sheet.update(values=[[wiki_explanation]], range_name=f"V{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}") + 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: debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}") time.sleep(Config.RETRY_DELAY) debug_print("Verifizierungs-Batch abgeschlossen.") - # ==================== List Metatitel, Description und Überschriften aus Websiten aus ==================== def scrape_website_details(url): """