Batch mode Wiki Verify

This commit is contained in:
2025-07-18 09:49:25 +00:00
parent a364232fa0
commit 1c7945d047

View File

@@ -968,8 +968,9 @@ class DataProcessor:
""" """
Iteriert durch die Zeilen und führt eine ChatGPT-basierte Verifizierung des Iteriert durch die Zeilen und führt eine ChatGPT-basierte Verifizierung des
in Spalte R ("Wiki URL") gefundenen Artikels durch. in Spalte R ("Wiki URL") gefundenen Artikels durch.
NEU: Arbeitet im Batch-Modus, sammelt alle Updates und schreibt sie am Ende.
""" """
self.logger.info("Starte Modus: Wiki-Verifizierung via ChatGPT...") self.logger.info("Starte Modus: Wiki-Verifizierung via ChatGPT (Batch-Modus)...")
if not self.sheet_handler.load_data(): if not self.sheet_handler.load_data():
return return
@@ -977,29 +978,26 @@ class DataProcessor:
all_data = self.sheet_handler.get_all_data_with_headers() all_data = self.sheet_handler.get_all_data_with_headers()
header_rows = self.sheet_handler._header_rows header_rows = self.sheet_handler._header_rows
# Bestimme den Bereich der zu verarbeitenden Zeilen
start_row_idx = (start_sheet_row - 1) if start_sheet_row is not None else header_rows start_row_idx = (start_sheet_row - 1) if start_sheet_row is not None else header_rows
end_row_idx = (end_sheet_row - 1) if end_sheet_row is not None else len(all_data) - 1 end_row_idx = (end_sheet_row - 1) if end_sheet_row is not None else len(all_data) - 1
# Wähle die relevanten Zeilen aus dem gesamten Datensatz aus
rows_to_process = all_data[start_row_idx : end_row_idx + 1] rows_to_process = all_data[start_row_idx : end_row_idx + 1]
processed_count = 0 processed_count = 0
# Iteriere durch die ausgewählten Zeilen all_updates = [] # Liste zum Sammeln aller Updates
for idx, row_data in enumerate(rows_to_process): for idx, row_data in enumerate(rows_to_process):
# Berechne die tatsächliche Zeilennummer im Google Sheet
current_row_num = start_row_idx + idx + 1 current_row_num = start_row_idx + idx + 1
if limit is not None and processed_count >= limit: if limit is not None and processed_count >= limit:
self.logger.info(f"Limit von {limit} Zeilen erreicht. Stoppe Wiki-Verifizierung.") self.logger.info(f"Limit von {limit} Zeilen erreicht. Stoppe Sammelphase.")
break break
# Prüflogik
verif_timestamp = self._get_cell_value_safe(row_data, "Wiki Verif. Timestamp").strip() verif_timestamp = self._get_cell_value_safe(row_data, "Wiki Verif. Timestamp").strip()
wiki_url = self._get_cell_value_safe(row_data, "Wiki URL").strip() wiki_url = self._get_cell_value_safe(row_data, "Wiki URL").strip()
if not verif_timestamp and wiki_url and "wikipedia.org" in wiki_url.lower(): if not verif_timestamp and wiki_url and "wikipedia.org" in wiki_url.lower():
self.logger.info(f"Zeile {current_row_num}: Verifizierung nötig (Timestamp leer, URL vorhanden).") self.logger.info(f"Zeile {current_row_num}: Verifizierung nötig, füge zur Queue hinzu.")
company_name = self._get_cell_value_safe(row_data, "CRM Name") company_name = self._get_cell_value_safe(row_data, "CRM Name")
website = self._get_cell_value_safe(row_data, "CRM Website") website = self._get_cell_value_safe(row_data, "CRM Website")
@@ -1011,19 +1009,15 @@ class DataProcessor:
wiki_url=wiki_url wiki_url=wiki_url
) )
updates = []
now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if verification_result: if verification_result:
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency", "FEHLER")]]}) all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency", "FEHLER")]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification", "")]]}) all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification", "")]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{current_row_num}', 'values': [[verification_result.get("suggested_url", "")]]}) all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{current_row_num}', 'values': [[verification_result.get("suggested_url", "")]]})
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{current_row_num}', 'values': [[now_timestamp]]}) all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{current_row_num}', 'values': [[now_timestamp]]})
if updates:
self.sheet_handler.batch_update_cells(updates)
processed_count += 1 processed_count += 1
time.sleep(2) time.sleep(2)
@@ -1032,6 +1026,14 @@ class DataProcessor:
else: else:
self.logger.debug(f"Zeile {current_row_num}: Übersprungen (Timestamp vorhanden oder keine URL).") self.logger.debug(f"Zeile {current_row_num}: Übersprungen (Timestamp vorhanden oder keine URL).")
# Schreibe alle gesammelten Updates auf einmal ins Sheet
if all_updates:
self.logger.info(f"Sammelphase abgeschlossen. Schreibe {len(all_updates)} Zell-Updates für {processed_count} Zeilen ins Google Sheet...")
self.sheet_handler.batch_update_cells(all_updates)
self.logger.info("Batch-Update erfolgreich abgeschlossen.")
else:
self.logger.info("Keine Zeilen zur Verifizierung gefunden oder keine Updates generiert.")
self.logger.info(f"Wiki-Verifizierung abgeschlossen. {processed_count} Zeilen verarbeitet.") self.logger.info(f"Wiki-Verifizierung abgeschlossen. {processed_count} Zeilen verarbeitet.")