This commit is contained in:
2025-06-30 14:50:17 +00:00
parent 2cae37cbe0
commit 03186331e5

View File

@@ -918,92 +918,90 @@ class DataProcessor:
process_ml_steps=True):
"""
Verarbeitet nur Zeilen, die in Spalte A mit 'x' markiert sind.
NEU: Leert zuerst alle abgeleiteten Spalten für eine saubere Neubewertung.
"""
self.logger.info(
f"Starte Re-Evaluierungsmodus (Spalte A = 'x'). Max. Zeilen: {row_limit if row_limit is not None else 'Unbegrenzt'}")
selected_steps_log = []
if process_wiki_steps:
selected_steps_log.append("Wiki")
if process_chatgpt_steps:
selected_steps_log.append("ChatGPT")
if process_website_steps:
selected_steps_log.append("Website")
if process_ml_steps:
selected_steps_log.append("ML Predict")
self.logger.info(
f"Ausgewaehlte Schritte fuer Re-Eval: {', '.join(selected_steps_log) if selected_steps_log else 'Keine'}")
steps_to_run_set = set()
if process_wiki_steps:
steps_to_run_set.add('wiki')
if process_chatgpt_steps:
steps_to_run_set.add('chat')
if process_website_steps:
steps_to_run_set.add('web')
if process_ml_steps:
steps_to_run_set.add('ml_predict')
if not steps_to_run_set:
self.logger.warning(
"Keine Verarbeitungsschritte fuer Re-Eval ausgewaehlt. Modus wird uebersprungen.")
return
if not self.sheet_handler.load_data():
self.logger.error(
"Fehler beim Laden der Daten fuer Re-Evaluation.")
self.logger.error("Fehler beim Laden der Daten fuer Re-Evaluation.")
return
all_data = self.sheet_handler.get_all_data_with_headers()
header_rows = self.sheet_handler._header_rows
if not all_data or len(all_data) <= header_rows:
self.logger.warning(
"Keine Datenzeilen fuer Re-Evaluation gefunden.")
self.logger.warning("Keine Datenzeilen fuer Re-Evaluation gefunden.")
return
reeval_col_idx = COLUMN_MAP.get("ReEval Flag")
if reeval_col_idx is None:
self.logger.critical(
"FEHLER: 'ReEval Flag' Spaltenindex nicht in COLUMN_MAP gefunden. Breche ab.")
self.logger.critical("FEHLER: 'ReEval Flag' nicht in COLUMN_MAP. Breche ab.")
return
rows_to_process = []
for idx, row_data in enumerate(all_data):
if idx < header_rows:
continue
row_num_in_sheet = idx + 1
cell_a_value = self._get_cell_value_safe(
row_data, "ReEval Flag").strip().lower()
if cell_a_value == "x":
rows_to_process.append(
{'row_num': row_num_in_sheet, 'data': row_data})
if idx < header_rows: continue
if self._get_cell_value_safe(row_data, "ReEval Flag").strip().lower() == "x":
rows_to_process.append({'row_num': idx + 1, 'data': row_data})
found_count = len(rows_to_process)
self.logger.info(f"{found_count} Zeilen mit ReEval-Flag 'x' gefunden.")
if found_count == 0:
return
if found_count == 0: return
# Spalten definieren, die vor der Neubewertung geleert werden sollen
cols_to_clear_keys = [
"Wiki URL", "Wiki Sitz Stadt", "Wiki Sitz Land", "Wiki Absatz", "Wiki Branche",
"Wiki Umsatz", "Wiki Mitarbeiter", "Wiki Kategorien", "Wikipedia Timestamp",
"Wiki Verif. Timestamp", "SerpAPI Wiki Search Timestamp", "Chat Wiki Konsistenzpruefung",
"Chat Begruendung Wiki Inkonsistenz", "Chat Vorschlag Wiki Artikel", "Begruendung bei Abweichung",
"Website Rohtext", "Website Zusammenfassung", "Website Meta-Details", "Website Scrape Timestamp", "URL Prüfstatus",
"Chat Vorschlag Branche", "Chat Branche Konfidenz", "Chat Konsistenz Branche",
"Chat Begruendung Abweichung Branche", "Finaler Umsatz (Wiki>CRM)", "Finaler Mitarbeiter (Wiki>CRM)",
"Geschaetzter Techniker Bucket", "Plausibilität Umsatz", "Plausibilität Mitarbeiter",
"Plausibilität Umsatz/MA Ratio", "Abweichung Umsatz CRM/Wiki", "Abweichung MA CRM/Wiki",
"Plausibilität Begründung", "Plausibilität Prüfdatum", "Timestamp letzte Pruefung", "Version", "Tokens"
]
clear_updates = []
for task in rows_to_process:
row_num = task['row_num']
for key in cols_to_clear_keys:
col_idx = COLUMN_MAP.get(key)
if col_idx is not None:
col_letter = self.sheet_handler._get_col_letter(col_idx + 1)
clear_updates.append({'range': f'{col_letter}{row_num}', 'values': [['']]})
if clear_updates:
self.logger.info(f"Leere {len(clear_updates)} Zellen für {found_count} Re-Eval-Zeilen zur Vorbereitung...")
self.sheet_handler.batch_update_cells(clear_updates)
self.logger.info("Vorbereitung abgeschlossen. Starte eigentliche Verarbeitung...")
time.sleep(2)
self.sheet_handler.load_data()
all_data = self.sheet_handler.get_all_data_with_headers()
processed_count_actual = 0
steps_to_run_set = set(key for key, value in {'wiki': process_wiki_steps, 'chat': process_chatgpt_steps, 'web': process_website_steps, 'ml_predict': process_ml_steps}.items() if value)
for task in rows_to_process:
if row_limit is not None and processed_count_actual >= row_limit:
self.logger.info(
f"Zeilenlimit ({row_limit}) fuer Re-Evaluation erreicht.")
self.logger.info(f"Zeilenlimit ({row_limit}) fuer Re-Evaluation erreicht.")
break
current_row_data = all_data[task['row_num'] - 1]
self.logger.info(f"Bearbeite Re-Eval Zeile {task['row_num']}...")
processed_count_actual += 1
try:
self._process_single_row(
row_num_in_sheet=task['row_num'],
row_data=task['data'],
row_data=current_row_data,
steps_to_run=steps_to_run_set,
force_reeval=True,
clear_x_flag=clear_flag
)
except Exception as e_proc_reval:
self.logger.exception(
f"FEHLER bei Re-Evaluation von Zeile {task['row_num']}: {e_proc_reval}")
self.logger.exception(f"FEHLER bei Re-Evaluation von Zeile {task['row_num']}: {e_proc_reval}")
self.logger.info(
f"Re-Evaluierung abgeschlossen. {processed_count_actual} Zeilen verarbeitet.")
self.logger.info(f"Re-Evaluierung abgeschlossen. {processed_count_actual} Zeilen verarbeitet.")
# ==========================================================================
# === Batch Processing Methods ===========================================