diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 65f1edfe..41400ab1 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -109,44 +109,54 @@ PATTERNS_FILE_TXT = "technician_patterns.txt" # Alt (Optional beibehalten) PATTERNS_FILE_JSON = "technician_patterns.json" # Neu (Empfohlen) def load_branch_mapping(file_path='Branchen.csv'): - logger = logging.getLogger(__name__) + logger = logging.getLogger(__name__) # Logger holen, um sicherzugehen + + # +++ Zusätzlicher Debugging-Schritt: Pfad und Existenz prüfen +++ + absolute_path = os.path.abspath(file_path) + logger.info(f"Versuche Branchen-Mapping zu laden von: '{absolute_path}'") + if not os.path.exists(file_path): + logger.error(f"DATEI NICHT GEFUNDEN an Pfad: '{absolute_path}'") + return {} # Gib leeres Dict zurück, wenn Datei nicht existiert + try: df_mapping = pd.read_csv(file_path, sep=';', encoding='utf-8-sig') + logger.info(f"Datei '{file_path}' erfolgreich mit pandas gelesen. {len(df_mapping)} Zeilen gefunden.") + logger.debug(f"Gelesene Spaltennamen: {list(df_mapping.columns)}") + + # Spaltennamen bereinigen df_mapping.columns = [str(col).strip() for col in df_mapping.columns] + logger.debug(f"Bereinigte Spaltennamen: {list(df_mapping.columns)}") expected_cols = ['Branch Group', 'Branch'] if not all(col in df_mapping.columns for col in expected_cols): - logger.error(f"FEHLER: Erwartete Spalten {expected_cols} in '{file_path}' nicht gefunden.") + logger.error(f"FEHLER: Erwartete Spalten {expected_cols} in '{file_path}' nicht gefunden. " + f"Gefundene Spalten nach Bereinigung: {list(df_mapping.columns)}") return {} - # Verwende die neue Normalisierungsfunktion für die Keys + # Normalisierte Keys erstellen + df_mapping['normalized_keys'] = df_mapping['Branch'].apply(normalize_for_mapping) + + # Duplikate in den normalisierten Keys prüfen + if df_mapping['normalized_keys'].duplicated().any(): + duplicates = df_mapping[df_mapping['normalized_keys'].duplicated()]['normalized_keys'] + logger.warning(f"WARNUNG: Duplikate in normalisierten Branchen-Keys gefunden! Dies kann zu inkonsistentem Mapping führen. Duplikate: {list(duplicates)}") + branch_map_dict = pd.Series( df_mapping['Branch Group'].str.strip().values, - index=df_mapping['Branch'].apply(normalize_for_mapping) # HIER ANWENDEN + index=df_mapping['normalized_keys'] ).to_dict() - logger.info(f"Branchen-Mapping aus '{file_path}' geladen ({len(branch_map_dict)} Einträge).") + logger.info(f"Branchen-Mapping aus '{file_path}' erfolgreich geladen ({len(branch_map_dict)} Einträge).") return branch_map_dict + except Exception as e: - logger.error(f"FEHLER beim Laden der Branchen-Mapping-Datei '{file_path}': {e}") + logger.error(f"FATALER FEHLER beim Laden oder Verarbeiten der Branchen-Mapping-Datei '{file_path}':") + # Gib den vollständigen Traceback in das Log aus, um den genauen Fehlerort zu sehen + logger.error(traceback.format_exc()) return {} - -def normalize_for_mapping(text): - """ - Normalisiert einen String aggressiv für Mapping-Zwecke. - Entfernt Leerzeichen, macht alles klein, ersetzt gängige Sonderzeichen. - """ - if not isinstance(text, str): - return "" - text = text.lower() - text = text.strip() - # Ersetze gängige Trennzeichen und Varianten durch nichts, um sie zu ignorieren - text = re.sub(r'[\s/,-]+', '', text) - return text - # In Config-Klasse oder global aufrufen: -BRANCH_MAPPING = load_branch_mapping() + # --- Globale Konfiguration Klasse --- @@ -165,7 +175,7 @@ class Config: HTML_PARSER = "html.parser" # Parser fuer BeautifulSoup ('lxml' ist schneller, erfordert aber Installation) TOKEN_MODEL = "gpt-3.5-turbo" # OpenAI Modell fuer Token-Zaehlung/Chat (Standard fuer die meisten Calls) USER_AGENT = 'Mozilla/5.0 (compatible; UnternehmenSkript/1.0; +https://www.example.com/bot)' # User-Agent fuer Web Scraping/Requests (Beispiel URL anpassen) - + BRANCH_MAPPING = load_branch_mapping() # --- Konfiguration fuer Batching & Parallelisierung --- # Passen Sie diese Werte an die Leistung Ihres Systems und die API-Limits an.