diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 704ab413..c32e1b97 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -533,11 +533,10 @@ class DataProcessor: # ==================== NEUE FUNKTION: process_verification_only ==================== def process_verification_only(): """ - Überarbeiteter Batch‑Prozess (Version 1.5.7, Modus 51): - - Fragt in der Konsole ab, wie viele Zeilen insgesamt verarbeitet werden sollen. - - Ermittelt die Gesamtzahl der Zeilen (exkl. Header) und protokolliert diesen Wert. - - Alle Zeilen, bei denen Spalte AO (Index 40) entweder gar nicht vorhanden oder leer ist, werden verarbeitet. - - Diese Zeilen werden in Paketen der Größe Config.BATCH_SIZE (z. B. 10 Zeilen) gebündelt. + Überarbeiteter Batch‑Prozess (Version 1.5.8, Modus 51): + - Ermittelt zunächst die letzte Zeile, in der in Spalte AO (Index 40) ein Zeitstempel steht. + - Beginnt die Verarbeitung ab der nächsten Zeile. + - Verarbeitet alle Zeilen ab diesem Startpunkt in Paketen 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: @@ -545,9 +544,24 @@ def process_verification_only(): T: Alternativer Wiki-Artikel (URL oder "Kein Wikipedia-Eintrag vorhanden.") U: Wiki-Erklärung / Begründung V–Y: Platzhalter (leer) - - Umfangreiche Log-Ausgaben unterstützen die Fehlerdiagnose. + - Umfassende Log-Ausgaben unterstützen die Fehlerdiagnose. """ - debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess (Version 1.5.7)...") + debug_print("Starte Verifizierungsmodus (Modus 51) im Batch-Prozess (Version 1.5.8)...") + + # Bestimme, in welcher Zeile in Spalte AO zuletzt ein Zeitstempel vorhanden ist + try: + col_ao = main_sheet.col_values(41) # Spalte AO (1-basierter Index) + except Exception as e: + debug_print(f"Fehler beim Auslesen von Spalte AO: {e}") + col_ao = [] + last_filled_row = 1 # Header wird angenommen in Zeile 1 + for idx, cell in enumerate(col_ao, start=1): + if cell.strip() != "": + last_filled_row = idx + start_row = last_filled_row + 1 + debug_print(f"Letzter Zeitstempel in Spalte AO in Zeile {last_filled_row}. Verarbeitung startet ab Zeile {start_row}.") + + # Abfrage: Wie viele Zeilen sollen insgesamt verarbeitet werden? try: total_rows = int(input("Wie viele Zeilen sollen insgesamt bearbeitet werden? ")) except Exception as e: @@ -560,28 +574,25 @@ def process_verification_only(): main_sheet = sh.sheet1 data = main_sheet.get_all_values() available_total = len(data) - 1 # ohne Header - debug_print(f"Anzahl Zeilen (exkl. Header): {available_total}") + # Begrenze die zu verarbeitenden Zeilen, falls total_rows vorgegeben ist if total_rows is not None: available_rows = min(total_rows, available_total) else: available_rows = available_total - if available_rows <= 0: - debug_print("Keine Zeilen zum Verarbeiten gefunden.") + if start_row > available_rows + 1: + debug_print("Es gibt keine Zeilen ohne Zeitstempel, daher wird nichts verarbeitet.") return - batch_size = Config.BATCH_SIZE # z. B. 10, einstellbar in der Config + batch_size = Config.BATCH_SIZE # z. B. 10, einstellbar in Config batches = [] row_numbers = [] - for i, row in enumerate(data[1:], start=2): + # Iteriere ab start_row bis available_rows + for i, row in enumerate(data[start_row - 1:], start=start_row): if i > available_rows + 1: break - # Wenn die Zeile mindestens 41 Spalten hat und in Spalte AO (Index 40) bereits ein Wert steht, überspringe sie. - if len(row) >= 41 and row[40].strip() != "": - debug_print(f"Zeile {i} wird übersprungen, da Spalte AO bereits gefüllt ist.") - continue - # Aufnahme der Zeile in das aktuelle Batch (unabhängig von weiteren Bedingungen) + # Hier wird davon ausgegangen, dass ab start_row keine Zeitstempel in AO vorliegen. entry_text = ( f"Eintrag {i}:\n" f"Firmenname: {row[1] if len(row) > 1 else ''}\n" @@ -665,7 +676,6 @@ def process_verification_only(): time.sleep(Config.RETRY_DELAY) batches = [] row_numbers = [] - if batches: aggregated_prompt = ( "Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. "