diff --git a/data_processor.py b/data_processor.py index f2fadda9..1fc1cc5f 100644 --- a/data_processor.py +++ b/data_processor.py @@ -1021,7 +1021,7 @@ class DataProcessor: self.logger.info(f"Re-Evaluierung abgeschlossen. {processed_count_actual} Zeilen verarbeitet.") - def process_wiki_verify(self, limit=None, start_sheet_row=None, end_sheet_row=None): +def process_wiki_verify(self, limit=None, start_sheet_row=None, end_sheet_row=None): """ Iteriert durch die Zeilen und führt eine ChatGPT-basierte Verifizierung des in Spalte R ("Wiki URL") gefundenen Artikels durch. @@ -1058,33 +1058,47 @@ class DataProcessor: 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, füge zur Queue hinzu.") - company_name = self._get_cell_value_safe(row_data, "CRM Name") - website = self._get_cell_value_safe(row_data, "CRM Website") - try: - verification_result = verify_wiki_article_chatgpt( - company_name=company_name, website=website, wiki_url=wiki_url - ) + # --- START KORREKTURBLOCK --- + # 1. Sammle alle notwendigen Daten für den neuen, kontextreichen Aufruf + company_name = self._get_cell_value_safe(row_data, "CRM Name") + website = self._get_cell_value_safe(row_data, "CRM Website") + parent_name = self._get_cell_value_safe(row_data, "System Vorschlag Parent Account") + + # 2. Lade den Artikel-Kontext + self.logger.debug(f" Lade Kontext für Artikel: {wiki_url}") + page_content = self.wiki_scraper.extract_company_data(wiki_url) + if not page_content or 'FEHLER' in str(page_content.get('title')): + self.logger.error(f" Konnte Kontext für URL {wiki_url} nicht laden. Überspringe KI-Verifizierung für diese Zeile.") + continue # Gehe zur nächsten Zeile - # +++ START: NEUER VALIDIERUNGS-BLOCK +++ - final_suggested_url = verification_result.get("suggested_url", "") - # Prüfe nur, wenn der Vorschlag wie eine Wikipedia-URL aussieht + # 3. Rufe die neue, korrekte Funktion auf + verification_result = verify_wiki_article_chatgpt( + company_name=company_name, + parent_name=parent_name, + website=website, + wiki_title=page_content.get('title', 'k.A.'), + wiki_summary=page_content.get('first_paragraph', 'k.A.') + ) + # --- ENDE KORREKTURBLOCK --- + + # Ihre bestehende Logik zur Validierung der vorgeschlagenen URL bleibt erhalten + final_suggested_url = verification_result.get("suggestion", "") # Geändert von "suggested_url" if final_suggested_url and "wikipedia.org" in final_suggested_url.lower(): if not is_valid_wikipedia_article_url(final_suggested_url): - self.logger.warning(f" -> KI-Vorschlag '{final_suggested_url}' ist eine halluzinierte/ungültige URL. Markiere als ungültig.") + self.logger.warning(f" -> KI-Vorschlag '{final_suggested_url}' ist eine ungültige URL.") final_suggested_url = f"Vorschlag (ungültig): {final_suggested_url}" else: - self.logger.info(f" -> KI-Vorschlag '{final_suggested_url}' ist eine gültige, erreichbare URL.") - # +++ ENDE: NEUER VALIDIERUNGS-BLOCK +++ + self.logger.info(f" -> KI-Vorschlag '{final_suggested_url}' ist eine gültige URL.") now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + # Ihre bestehende Update-Logik, aber mit der sicheren get_col_idx Funktion updates_for_row = [ - {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Wiki Konsistenzpruefung")["index"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency")]]}, - {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Begründung Wiki Inkonsistenz")["index"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification")]]}, - # Verwende die validierte URL - {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Vorschlag Wiki Artikel")["index"] + 1)}{current_row_num}', 'values': [[final_suggested_url]]}, - {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Wiki Verif. Timestamp")["index"] + 1)}{current_row_num}', 'values': [[now_timestamp]]} + {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Wiki Konsistenzpruefung") + 1)}{current_row_num}', 'values': [[verification_result.get("consistency")]]}, + {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Begründung Wiki Inkonsistenz") + 1)}{current_row_num}', 'values': [[verification_result.get("justification")]]}, + {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Chat Vorschlag Wiki Artikel") + 1)}{current_row_num}', 'values': [[final_suggested_url]]}, + {'range': f'{self.sheet_handler._get_col_letter(get_col_idx("Wiki Verif. Timestamp") + 1)}{current_row_num}', 'values': [[now_timestamp]]} ] all_updates.extend(updates_for_row) @@ -1100,16 +1114,13 @@ class DataProcessor: time.sleep(1) - except KeyError as ke: - self.logger.critical(f"FATALER KEY_ERROR in Zeile {current_row_num}: Die Spalte '{ke}' existiert nicht im COLUMN_MAP in config.py! Breche Verarbeitung dieser Zeile ab.", exc_info=False) - continue except Exception as e: self.logger.error(f"Unerwarteter Fehler bei Verarbeitung von Zeile {current_row_num}: {e}", exc_info=True) else: self.logger.debug(f"Zeile {current_row_num}: Übersprungen (Timestamp vorhanden oder keine URL).") if all_updates: - self.logger.info(f"Schleife beendet. Schreibe die letzten {len(all_updates)} Zell-Updates für {processed_count_in_batch} Zeilen...") + self.logger.info(f"Schleife beendet. Schreibe die letzten {len(all_updates)} Zell-Updates...") self.sheet_handler.batch_update_cells(all_updates) self.logger.info("Finaler Batch erfolgreich geschrieben.")