Implementierung der kontextbasierten Brancheneinstufung
- FEATURE: Brancheneinstufung 2.0 implementiert; nutzt nun die reichhaltigen Definitionen und Beispiele aus `config.py` für ein hochpräzises, kontextuelles Matching. - REFACTOR: `evaluate_branche_chatgpt` in `helpers.py` komplett neugeschrieben; gibt nun eine detaillierte Begründung für die Zuordnung zurück. - FEATURE: Neuer Batch-Modus `reclassify_branches` in `data_processor.py` hinzugefügt, um eine vollständige Neubewertung aller Accounts zu ermöglichen.
This commit is contained in:
@@ -1462,6 +1462,78 @@ class DataProcessor:
|
||||
|
||||
self.logger.info(f"FSM-Pitch-Generierung abgeschlossen. {processed_count} Zeilen bearbeitet.")
|
||||
|
||||
def reclassify_all_branches(self, start_sheet_row=None, limit=None):
|
||||
"""
|
||||
Führt für alle relevanten Zeilen eine neue Brancheneinstufung (v2.0) durch.
|
||||
Dieser Modus ist ideal, um nach einer Änderung der Branchen-Definitionen
|
||||
den gesamten Datenbestand zu aktualisieren.
|
||||
"""
|
||||
self.logger.info(f"Starte Modus 'reclassify_branches'. Bereich: {start_sheet_row or 'Start'}, Limit: {limit or 'Unbegrenzt'}")
|
||||
|
||||
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
|
||||
|
||||
effective_start = start_sheet_row if start_sheet_row is not None else header_rows + 1
|
||||
|
||||
tasks = []
|
||||
for i in range(effective_start - 1, len(all_data)):
|
||||
if limit is not None and len(tasks) >= limit:
|
||||
break
|
||||
|
||||
row_data = all_data[i]
|
||||
company_name = self._get_cell_value_safe(row_data, "CRM Name").strip()
|
||||
if company_name:
|
||||
tasks.append({'row_num': i + 1, 'data': row_data})
|
||||
|
||||
if not tasks:
|
||||
self.logger.info("Keine Zeilen zur Neubewertung gefunden.")
|
||||
return
|
||||
|
||||
self.logger.info(f"{len(tasks)} Zeilen für die Neubewertung der Branche identifiziert.")
|
||||
|
||||
all_sheet_updates = []
|
||||
now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
for task in tasks:
|
||||
row_num = task['row_num']
|
||||
row_data = task['data']
|
||||
|
||||
self.logger.debug(f"Bewerte Branche für Zeile {row_num}...")
|
||||
|
||||
try:
|
||||
result = evaluate_branche_chatgpt(
|
||||
company_name=self._get_cell_value_safe(row_data, "CRM Name"),
|
||||
website_summary=self._get_cell_value_safe(row_data, "Website Zusammenfassung"),
|
||||
wiki_absatz=self._get_cell_value_safe(row_data, "Wiki Absatz")
|
||||
)
|
||||
|
||||
# Updates für die drei Zielspalten vorbereiten
|
||||
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Branche"] + 1)}{row_num}', 'values': [[result.get('branch')]]})
|
||||
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Branche Konfidenz"] + 1)}{row_num}', 'values': [[result.get('confidence')]]})
|
||||
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begruendung Abweichung Branche"] + 1)}{row_num}', 'values': [[result.get('justification')]]})
|
||||
# Auch den Timestamp aktualisieren
|
||||
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Timestamp letzte Pruefung"] + 1)}{row_num}', 'values': [[now_timestamp]]})
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"FEHLER bei Branchen-Neubewertung für Zeile {row_num}: {e}")
|
||||
all_sheet_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Branche"] + 1)}{row_num}', 'values': [['FEHLER (Prozess)']]} )
|
||||
|
||||
# Batch-Update Logik (vereinfacht, um es hier zu zeigen)
|
||||
if len(all_sheet_updates) >= 200: # 50 Zeilen * 4 Updates pro Zeile
|
||||
self.logger.info(f"Sende Batch-Update für {len(all_sheet_updates)//4} Branchen...")
|
||||
self.sheet_handler.batch_update_cells(all_sheet_updates)
|
||||
all_sheet_updates = []
|
||||
time.sleep(1)
|
||||
|
||||
# Letzten Batch senden
|
||||
if all_sheet_updates:
|
||||
self.logger.info(f"Sende finalen Batch-Update für {len(all_sheet_updates)//4} Branchen...")
|
||||
self.sheet_handler.batch_update_cells(all_sheet_updates)
|
||||
|
||||
self.logger.info("Branchen-Neubewertung abgeschlossen.")
|
||||
|
||||
|
||||
# ==========================================================================
|
||||
|
||||
Reference in New Issue
Block a user