bugfix
This commit is contained in:
@@ -109,44 +109,54 @@ PATTERNS_FILE_TXT = "technician_patterns.txt" # Alt (Optional beibehalten)
|
|||||||
PATTERNS_FILE_JSON = "technician_patterns.json" # Neu (Empfohlen)
|
PATTERNS_FILE_JSON = "technician_patterns.json" # Neu (Empfohlen)
|
||||||
|
|
||||||
def load_branch_mapping(file_path='Branchen.csv'):
|
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:
|
try:
|
||||||
df_mapping = pd.read_csv(file_path, sep=';', encoding='utf-8-sig')
|
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]
|
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']
|
expected_cols = ['Branch Group', 'Branch']
|
||||||
if not all(col in df_mapping.columns for col in expected_cols):
|
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 {}
|
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(
|
branch_map_dict = pd.Series(
|
||||||
df_mapping['Branch Group'].str.strip().values,
|
df_mapping['Branch Group'].str.strip().values,
|
||||||
index=df_mapping['Branch'].apply(normalize_for_mapping) # HIER ANWENDEN
|
index=df_mapping['normalized_keys']
|
||||||
).to_dict()
|
).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
|
return branch_map_dict
|
||||||
|
|
||||||
except Exception as e:
|
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 {}
|
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:
|
# In Config-Klasse oder global aufrufen:
|
||||||
BRANCH_MAPPING = load_branch_mapping()
|
|
||||||
|
|
||||||
|
|
||||||
# --- Globale Konfiguration Klasse ---
|
# --- Globale Konfiguration Klasse ---
|
||||||
@@ -165,7 +175,7 @@ class Config:
|
|||||||
HTML_PARSER = "html.parser" # Parser fuer BeautifulSoup ('lxml' ist schneller, erfordert aber Installation)
|
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)
|
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)
|
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 ---
|
# --- Konfiguration fuer Batching & Parallelisierung ---
|
||||||
# Passen Sie diese Werte an die Leistung Ihres Systems und die API-Limits an.
|
# Passen Sie diese Werte an die Leistung Ihres Systems und die API-Limits an.
|
||||||
|
|||||||
Reference in New Issue
Block a user