diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 2dd24b79..20ff6a80 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -1406,21 +1406,27 @@ class WikipediaScraper: # ==================== NEUE FUNKTION: Angepasste evaluate_branche_chatgpt ==================== def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary): + import csv + from datetime import datetime + # Hier sollte auch die Funktion debug_print und normalize_company_name verfügbar sein. + # Ich gehe davon aus, dass diese Funktionen bereits definiert sind. + def load_target_branches(): try: with open("ziel_Branchenschema.csv", "r", encoding="utf-8-sig") as csvfile: reader = csv.reader(csvfile) - # Spalte 0 wird getrimmt + # Spalte 0 wird getrimmt und nur nicht-leere Zeilen übernommen branches = [row[0].strip() for row in reader if row and row[0].strip()] return branches except Exception as e: debug_print(f"Fehler beim Laden des Ziel-Branchenschemas: {e}") return [] - + + # Lade das Ziel-Branchenschema und normalisiere die Werte target_branches = load_target_branches() - # Wir loggen hier nicht das vollständige Ziel-Branchenschema! norm_targets = [normalize_company_name(tb) for tb in target_branches] - + + # Definiere die Fokus-Branchen, die im Prompt berücksichtigt werden sollen focus_branches = [ "Gutachter / Versicherungen > Baugutachter", "Gutachter / Versicherungen > Technische Gutachten", @@ -1439,8 +1445,8 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg "Versorger > Telekommunikation" ] focus_branches_str = "\n".join(focus_branches) - - # API-Key laden + + # API-Key laden – falls nicht verfügbar, gibt die Funktion einen Fallback zurück try: with open("api_key.txt", "r") as f: api_key = f.read().strip() @@ -1449,15 +1455,15 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg return {"branch": "k.A.", "consistency": "k.A.", "justification": "k.A."} openai.api_key = api_key - # Entscheidung: Falls kein Wikipedia-Artikel vorliegt, verwende die Website-Zusammenfassung + # Falls kein Wikipedia-Artikel vorhanden ist, verwende die Website-Zusammenfassung als Fallback. if wiki_branche.strip().lower() == "k.a.": debug_print("Kein Wikipedia-Artikel vorhanden – verwende Website-Zusammenfassung als Branchenbeschreibung-Fallback.") used_description = website_summary else: used_description = beschreibung debug_print(f"Verwendete Angaben: CRM-Branche='{crm_branche}', externe Beschreibung='{beschreibung}', Wiki-Branche='{wiki_branche}', Wiki-Kategorien='{wiki_kategorien}', Website-Zusammenfassung='{website_summary}'") - - # Erstelle den Prompt – wir verzichten hier auf die Ausgabe des Ziel-Branchenschemas + + # Erstelle den System-Prompt, der die Fokus-Branchen als bevorzugte Auswahlmöglichkeiten integriert. system_prompt = ( "Du bist ein Experte im Field Service Management. Ordne das folgende Unternehmen exakt einer Branche zu.\n\n" f"CRM-Branche (Spalte F): {crm_branche if crm_branche.strip() != '' else 'k.A.'}\n" @@ -1473,7 +1479,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg "Die Antwort muss exakt einem der Zielbranchen entsprechen. Bitte antworte im Format:\n" "Branche: \nÜbereinstimmung: \nBegründung: " ) - + try: response = openai.ChatCompletion.create( model=Config.TOKEN_MODEL, @@ -1484,14 +1490,14 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg debug_print(f"Branchenabgleich ChatGPT Antwort: '{result}'") except Exception as e: debug_print(f"Fehler beim Aufruf der ChatGPT API für Branchenabgleich: {e}") - # Falls keine Einschätzung möglich ist, nehmen wir den ursprünglichen CRM-Wert + # Fallback: Wenn keine ChatGPT-Einschätzung möglich ist if normalize_company_name(crm_branche) in norm_targets: debug_print("Fallback: Verwende CRM-Branche, da keine ChatGPT-Einschätzung verfügbar ist.") return {"branch": crm_branche, "consistency": "ok", "justification": "Keine ChatGPT-Einschätzung; CRM-Wert verwendet."} else: - return {"branch": "k.A.", "consistency": "k.A.", "justification": "Keine ChatGPT-Einschätzung möglich und CRM-Wert ungültig."} - - # Parse die Antwort + return {"branch": "k.A.", "consistency": "X", "justification": "Keine ChatGPT-Einschätzung möglich und CRM-Wert ungültig."} + + # Parse die Antwort von ChatGPT chat_branch = None chat_consistency = None chat_justification = "" @@ -1503,23 +1509,23 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg chat_consistency = line.split(":", 1)[1].strip() elif lower_line.startswith("begründung:"): chat_justification = line.split(":", 1)[1].strip() - + debug_print(f"Extrahiert: Branche='{chat_branch}', Übereinstimmung='{chat_consistency}', Begründung='{chat_justification}'") - - # Normiere die Werte zur Validierung + + # Normiere die Werte zum Vergleich norm_crm = normalize_company_name(crm_branche) norm_chat = normalize_company_name(chat_branch) if chat_branch else "" debug_print(f"Normierte Werte: CRM='{norm_crm}', ChatGPT-Vorschlag='{norm_chat}'") - - # Falls ChatGPT keine brauchbare Antwort lieferte, verwenden wir den CRM-Wert als Fallback + + # Falls ChatGPT keine aussagekräftige Antwort liefert, verwende den CRM-Wert als Fallback if not norm_chat: debug_print("Keine aussagekräftige ChatGPT-Antwort erhalten, fallback: CRM-Branche.") if norm_crm in norm_targets: return {"branch": crm_branche, "consistency": "ok", "justification": "Keine ChatGPT-Antwort; CRM-Wert übernommen."} else: return {"branch": "k.A.", "consistency": "X", "justification": "Keine ChatGPT-Antwort und CRM-Wert passt nicht."} - - # Überprüfe, ob der ChatGPT-Vorschlag im Ziel-Branchenschema enthalten ist + + # Überprüfe, ob der ChatGPT-Vorschlag exakt im Ziel-Branchenschema enthalten ist if norm_chat not in norm_targets: debug_print(f"Vorgeschlagene Branche '{chat_branch}' (normiert: '{norm_chat}') entspricht nicht exakt dem Ziel-Branchenschema.") # Fallback: Falls der CRM-Wert gültig ist, verwende ihn. @@ -1530,7 +1536,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg debug_print("Fallback: Keine gültige Branche gefunden.") return {"branch": "k.A.", "consistency": "X", "justification": "Vorgeschlagene Branche entspricht nicht dem Ziel-Branchenschema."} else: - # Vergleiche die normierten Werte von CRM und ChatGPT + # Vergleiche CRM- und ChatGPT-Vorschlag – wenn diese exakt übereinstimmen, ist die Konsistenz "ok" if norm_crm and norm_crm == norm_chat: chat_consistency = "ok" chat_justification = ""