From aadb210da3301e08c0966472fddde4daafe3eaec Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 15 Apr 2025 11:48:24 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 78 ++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index c0d227ce..ca7c552d 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -1559,37 +1559,38 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg # Lade Mapping und Liste der erlaubten Ziel-Branchen mapping, allowed_branches = load_target_branches() -# Baue den Text für das Ziel-Branchenschema, der im System-Prompt an ChatGPT übergeben wird -schema_lines = ["Ziel-Branchenschema: Folgende Branchenbereiche sind gültig:"] -for branch in allowed_branches: - schema_lines.append(f"- {branch}") -target_schema_info = "\n".join(schema_lines) + # Baue den Text für das Ziel-Branchenschema, der im System-Prompt an ChatGPT übergeben wird + schema_lines = ["Ziel-Branchenschema: Folgende Branchenbereiche sind gültig:"] + for branch in allowed_branches: + schema_lines.append(f"- {branch}") + target_schema_info = "\n".join(schema_lines) -# Erstelle den System-Prompt inklusive der Zielvorgaben. Hier wird das Zielbranchenschema aus der CSV-Datei -# (via load_target_schema) eingebunden. -target_mapping, target_schema_string, allowed_targets = load_target_schema() + # Erstelle den System-Prompt inklusive der Zielvorgaben. + # Hier wird das Zielbranchenschema aus der CSV-Datei (via load_target_schema) eingebunden. + target_mapping, target_schema_string, allowed_targets = load_target_schema() -prompt = ( - f"{target_schema_string}\n\n" - f"Ordne das Unternehmen anhand folgender Angaben exakt einer Branche des Ziel-Branchenschemas zu:\n" - f"CRM-Branche: {crm_branche}\n" - f"Beschreibung: {beschreibung}\n" - f"Wikipedia-Branche: {wiki_branche}\n" - f"Wikipedia-Kategorien: {wiki_kategorien}\n" - f"Website-Zusammenfassung: {website_summary}\n\n" - "Antworte im Format:\n" - "Branche: \n" - "Übereinstimmung: \n" - "Begründung: " -) + prompt = ( + f"{target_schema_string}\n\n" + f"Ordne das Unternehmen anhand folgender Angaben exakt einer Branche des Ziel-Branchenschemas zu:\n" + f"CRM-Branche: {crm_branche}\n" + f"Beschreibung: {beschreibung}\n" + f"Wikipedia-Branche: {wiki_branche}\n" + f"Wikipedia-Kategorien: {wiki_kategorien}\n" + f"Website-Zusammenfassung: {website_summary}\n\n" + "Antworte im Format:\n" + "Branche: \n" + "Übereinstimmung: \n" + "Begründung: " + ) + + try: + with open("api_key.txt", "r") as f: + api_key = f.read().strip() + except Exception as e: + debug_print(f"Fehler beim Lesen des API-Tokens für Brancheneinschätzung: {e}") + return {"branch": crm_branche, "consistency": "X", "justification": "API-Key Fehler"} + openai.api_key = api_key -try: - with open("api_key.txt", "r") as f: - api_key = f.read().strip() -except Exception as e: - debug_print(f"Fehler beim Lesen des API-Tokens für Brancheneinschätzung: {e}") - return {"branch": crm_branche, "consistency": "X", "justification": "API-Key Fehler"} -openai.api_key = api_key try: response = openai.ChatCompletion.create( model=Config.TOKEN_MODEL, @@ -1600,7 +1601,7 @@ openai.api_key = api_key except Exception as e: debug_print(f"Fehler bei der ChatGPT-Anfrage für Brancheneinschätzung: {e}") return {"branch": crm_branche, "consistency": "X", "justification": "API-Anfrage Fehler"} - + # Erwarte ein Format: # Branche: # Übereinstimmung: @@ -1610,26 +1611,27 @@ openai.api_key = api_key consistency = "" explanation = "" for line in lines: - if line.lower().startswith("branche:"): + lower_line = line.lower() + if lower_line.startswith("branche:"): suggestion = line.split(":", 1)[1].strip() - elif line.lower().startswith("übereinstimmung:"): + elif lower_line.startswith("übereinstimmung:"): consistency = line.split(":", 1)[1].strip() - elif line.lower().startswith("begründung:"): + elif lower_line.startswith("begründung:"): explanation = line.split(":", 1)[1].strip() - - # Bereinige den Vorschlag: entferne unnötige Satzzeichen und konvertiere in Kleinbuchstaben + + # Bereinige den Vorschlag: Entferne unnötige Satzzeichen und konvertiere in Kleinbuchstaben clean_suggestion = re.sub(r'[^\w\s/&-]', '', suggestion).strip().lower() - + # Falls der bereinigte Vorschlag kein Hierarchie-Trennzeichen ">" enthält, übernehme den Präfix aus der CRM-Branche if ">" not in clean_suggestion and ">" in crm_branche: prefix = crm_branche.split(">")[0].strip().lower() clean_suggestion = prefix + " > " + clean_suggestion - + # Prüfe, ob der bereinigte Vorschlag mit einem erlaubten Eintrag (Fuzzy Matching) übereinstimmt valid = False for allowed in allowed_branches: sim = fuzzy_similarity(clean_suggestion, allowed) - if sim > 0.95: # sehr hoher Ähnlichkeit (kann angepasst werden) + if sim > 0.95: # sehr hoher Ähnlichkeitswert (anpassbar) valid = True # Setze den Vorschlag exakt auf den Zielwert clean_suggestion = allowed @@ -1637,7 +1639,7 @@ openai.api_key = api_key if not valid: debug_print(f"Mapping ungültig für Vorschlag: '{clean_suggestion}'. Fallback: CRM-Branche ('{crm_branche}') verwendet.") return {"branch": crm_branche, "consistency": consistency, "justification": "Fallback: CRM-Wert verwendet aufgrund ungültiger ChatGPT-Zuweisung."} - + return {"branch": clean_suggestion, "consistency": consistency, "justification": explanation}