From 97676f4d6f1cd2d81403040fbea3c1aa9ef4b9db Mon Sep 17 00:00:00 2001 From: Floke Date: Fri, 18 Jul 2025 07:19:37 +0000 Subject: [PATCH] Restore Wiki-Verify Mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FEATURE: Der `wiki_verify`-Modus wurde wiederhergestellt und ist nun über die CLI/das Menü aufrufbar. - FIX: `data_processor.py` enthält nun die `process_wiki_verify`-Methode, die gezielt Wikipedia-Artikel mittels ChatGPT verifiziert. - FIX: Dispatcher in `brancheneinstufung.py` erkennt und startet den `wiki_verify`-Modus korrekt. --- data_processor.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/data_processor.py b/data_processor.py index 662c8d7e..86f3112e 100644 --- a/data_processor.py +++ b/data_processor.py @@ -963,6 +963,73 @@ class DataProcessor: self.logger.info(f"{found_count} Zeilen mit ReEval-Flag 'x' gefunden.") if found_count == 0: return + 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. + """ + self.logger.info("Starte Modus: Wiki-Verifizierung via ChatGPT...") + + if not self.sheet_handler.load_data(): + return + + all_data = self.sheet_handler.get_all_data_with_headers() + header_rows = self.sheet_handler._header_rows + + start_row_idx = (start_sheet_row - 1) if start_sheet_row else header_rows + end_row_idx = (end_sheet_row - 1) if end_sheet_row else len(all_data) -1 + + rows_to_check = all_data[start_row_idx : end_row_idx + 1] + + processed_count = 0 + for idx, row_data in enumerate(rows_to_check): + current_row_num = start_row_idx + idx + 1 + if limit is not None and processed_count >= limit: + self.logger.info(f"Limit von {limit} Zeilen erreicht. Stoppe Wiki-Verifizierung.") + break + + # _needs_wiki_verification Logik hier direkt implementiert + 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() + + 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).") + + 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 + ) + + updates = [] + now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + 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")]]}) + 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", "")]]}) + + 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 + time.sleep(2) # Kurze Pause, um API-Limits zu respektieren + + except Exception as e: + self.logger.error(f"Fehler bei der Wiki-Verifizierung für Zeile {current_row_num}: {e}") + else: + self.logger.debug(f"Zeile {current_row_num}: Übersprungen (Timestamp vorhanden oder keine URL).") + + self.logger.info(f"Wiki-Verifizierung abgeschlossen. {processed_count} Zeilen verarbeitet.") + + + # NEU: Spalten definieren, die vor der Neubewertung geleert werden sollen cols_to_clear_keys = [ # WICHTIG: "Wiki URL" (R) und "CRM Vorschlag Wiki URL" (N) werden NICHT mehr geleert,