This commit is contained in:
2025-04-10 09:52:58 +00:00
parent 5678dd76a1
commit 70c7fe1da0

View File

@@ -534,15 +534,16 @@ class DataProcessor:
def process_verification_only(): def process_verification_only():
""" """
Überarbeiteter BatchProzess (Modus 51): Überarbeiteter BatchProzess (Modus 51):
- Fragt zunächst in der Konsole ab, wie viele Zeilen insgesamt verarbeitet werden sollen. - Fragt 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). - Alle Zeilen, bei denen Spalte AO (Index 40) leer ist (oder die Spaltenanzahl < 41 beträgt), werden verarbeitet.
- Für jedes Batch wird ein aggregierter Prompt erstellt, an ChatGPT gesendet und die Antwort - 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. zeilenweise geparst.
- Die Ergebnisse werden in den Spalten S bis Y geschrieben: - Die Ergebnisse werden in den Spalten S bis Y geschrieben:
S: Wiki-Validierung (z.B. "OK" oder "X") S: Wiki-Validierung (z.B. "OK" oder "X")
T: Alternativer Wiki-Artikel (URL oder "Kein Wikipedia-Eintrag vorhanden.") T: Alternativer Wiki-Artikel (URL oder "Kein Wikipedia-Eintrag vorhanden.")
U: Wiki-Erklärung / Begründung 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. - Umfassendes Logging informiert über Batch, Zeilennummern, Token-Zahl etc.
""" """
debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess...") debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess...")
@@ -559,33 +560,33 @@ def process_verification_only():
main_sheet = sh.sheet1 main_sheet = sh.sheet1
data = main_sheet.get_all_values() 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 available_rows = len(data) - 1 # ohne Header
if total_rows is not None and total_rows < available_rows: if total_rows is not None and total_rows < available_rows:
available_rows = total_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 = [] batches = []
row_numbers = [] 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): for i, row in enumerate(data[1:], start=2):
if i > available_rows + 1: # plus Header-Zeile if i > available_rows + 1:
break break
# Überspringe Zeilen, in denen in Spalte AO (Index 40) bereits ein Wert steht # Überspringe Zeilen, bei denen Spalte AO (Index 40) bereits gefüllt ist.
if len(row) > 40 and row[40].strip() != "": if len(row) >= 41 and row[40].strip() != "":
continue continue
# Hier wird angenommen, dass relevante Daten in mindestens 25 Spalten vorhanden sind. # Nehme die Zeile in den Batch auf.
if len(row) <= 25 or row[24].strip() == "": entry_text = (
entry_text = ( f"Eintrag {i}:\n"
f"Eintrag {i}:\n" f"Firmenname: {row[1] if len(row) > 1 else ''}\n"
f"Firmenname: {row[1] if len(row)>1 else ''}\n" f"CRM-Beschreibung: {row[7] if len(row) > 7 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"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-Absatz: {row[12] if len(row)>12 else 'k.A.'}\n" f"Wiki-Kategorien: {row[16] if len(row) > 16 else 'k.A.'}\n"
f"Wiki-Kategorien: {row[16] if len(row)>16 else 'k.A.'}\n" "-----\n"
"-----\n" )
) batches.append(entry_text)
batches.append(entry_text) row_numbers.append(i)
row_numbers.append(i)
if len(batches) == batch_size: if len(batches) == batch_size:
aggregated_prompt = ( aggregated_prompt = (
"Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. " "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}") debug_print(f"Fehler bei der ChatGPT-Anfrage für Batch {row_numbers[0]}-{row_numbers[-1]}: {e}")
result = "" result = ""
answers = result.split("\n") 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: for current_row in row_numbers:
answer = "k.A." answer = "k.A."
for line in answers: 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=[[wiki_confirm]], range_name=f"S{current_row}")
main_sheet.update(values=[[alt_article]], range_name=f"T{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=[[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}") main_sheet.update(values=[["", "", "", ""]], range_name=f"V{current_row}:Y{current_row}")
debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}") debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}")
except Exception as e: except Exception as e: