bugfix
This commit is contained in:
@@ -389,6 +389,38 @@ def is_valid_company_article(wiki_categories):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def load_target_schema_string(csv_filepath="ziel_Branchenschema.csv"):
|
||||||
|
"""
|
||||||
|
Liest das Ziel-Branchenschema aus der CSV-Datei ein.
|
||||||
|
Die CSV-Datei sollte in Spalte A den externen (Wikipedia-)Branchenbegriff
|
||||||
|
und in Spalte B den zugehörigen Zielwert enthalten.
|
||||||
|
Es werden alle eindeutigen Zielwerte gesammelt und als Aufzählung zurückgegeben.
|
||||||
|
"""
|
||||||
|
import csv
|
||||||
|
valid_targets = set()
|
||||||
|
try:
|
||||||
|
with open(csv_filepath, encoding="utf-8") as f:
|
||||||
|
reader = csv.reader(f)
|
||||||
|
for row in reader:
|
||||||
|
# Wir erwarten mindestens zwei Spalten: Externer Begriff und Zielwert
|
||||||
|
if len(row) >= 2:
|
||||||
|
target = row[1].strip()
|
||||||
|
if target:
|
||||||
|
valid_targets.add(target)
|
||||||
|
except Exception as e:
|
||||||
|
debug_print("Fehler beim Einlesen des Ziel-Branchenschemas: " + str(e))
|
||||||
|
return "Ziel-Branchenschema nicht verfügbar."
|
||||||
|
|
||||||
|
if valid_targets:
|
||||||
|
# Wir können die Zielwerte sortieren, um immer dieselbe Reihenfolge zu gewährleisten.
|
||||||
|
sorted_targets = sorted(valid_targets, key=lambda s: s.lower())
|
||||||
|
return (
|
||||||
|
"Ziel-Branchenschema: Folgende Branchenbereiche sind gültig:\n" +
|
||||||
|
"\n".join(f"- {value}" for value in sorted_targets) +
|
||||||
|
"\nBitte ordne das Unternehmen ausschließlich in einen dieser Bereiche ein."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return "Ziel-Branchenschema nicht verfügbar."
|
||||||
|
|
||||||
def serp_website_lookup(company_name):
|
def serp_website_lookup(company_name):
|
||||||
"""
|
"""
|
||||||
@@ -1507,21 +1539,20 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
Vorgehen:
|
Vorgehen:
|
||||||
1. Es wird ein aggregierter Prompt mit den Angaben (CRM-Branche, Beschreibung, Wikipedia-Branche,
|
1. Es wird ein aggregierter Prompt mit den Angaben (CRM-Branche, Beschreibung, Wikipedia-Branche,
|
||||||
Wikipedia-Kategorien, Website-Zusammenfassung) erstellt und an ChatGPT geschickt.
|
Wikipedia-Kategorien, Website-Zusammenfassung) erstellt und an ChatGPT geschickt.
|
||||||
2. Der von ChatGPT zurückgegebene externe Branchenvorschlag wird geparst.
|
2. Zusätzlich wird das gültige Ziel-Branchenschema (als Übersicht) dem Prompt angehängt.
|
||||||
3. Unerwünschte Präfixe werden entfernt.
|
3. Der von ChatGPT zurückgegebene externe Branchenvorschlag wird geparst, normalisiert und
|
||||||
4. Anschließend wird der externe Vorschlag mittels map_external_branch() in den
|
mittels map_external_branch() in den standardisierten Zielwert überführt.
|
||||||
standardisierten Zielwert überführt.
|
4. Falls erforderlich, wird der CRM-Präfix ergänzt.
|
||||||
5. Falls der resultierende Standardwert noch kein hierarchisches Trennzeichen ">" enthält,
|
5. Falls kein sinnvoller externer Vorschlag vorliegt, erfolgt der Fallback auf den CRM-Wert.
|
||||||
wird – sofern im CRM-Wert vorhanden – der fehlende Präfix ergänzt.
|
|
||||||
6. Der so ermittelte externe Vorschlag wird dann übernommen, sodass der finale Rückgabewert
|
|
||||||
exakt dem Ziel-Branchenschema entspricht.
|
|
||||||
Falls kein sinnvoller externer Vorschlag vorliegt, erfolgt der Fallback auf den CRM-Wert.
|
|
||||||
"""
|
"""
|
||||||
debug_print(
|
debug_print(
|
||||||
f"Verwendete Angaben: CRM-Branche='{crm_branche}', externe Beschreibung='{beschreibung}', "
|
f"Verwendete Angaben: CRM-Branche='{crm_branche}', externe Beschreibung='{beschreibung}', "
|
||||||
f"Wiki-Branche='{wiki_branche}', Wiki-Kategorien='{wiki_kategorien}', Website-Zusammenfassung='{website_summary}'"
|
f"Wiki-Branche='{wiki_branche}', Wiki-Kategorien='{wiki_kategorien}', Website-Zusammenfassung='{website_summary}'"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Hier definieren wir das Ziel-Branchenschema als Text, der ChatGPT als Grundlage dienen soll.
|
||||||
|
target_schema_info = load_target_schema_string()
|
||||||
|
|
||||||
prompt = (
|
prompt = (
|
||||||
f"Ordne das Unternehmen anhand folgender Angaben exakt einer Branche des Ziel-Branchenschemas zu:\n"
|
f"Ordne das Unternehmen anhand folgender Angaben exakt einer Branche des Ziel-Branchenschemas zu:\n"
|
||||||
f"CRM-Branche: {crm_branche}\n"
|
f"CRM-Branche: {crm_branche}\n"
|
||||||
@@ -1529,6 +1560,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
f"Wikipedia-Branche: {wiki_branche}\n"
|
f"Wikipedia-Branche: {wiki_branche}\n"
|
||||||
f"Wikipedia-Kategorien: {wiki_kategorien}\n"
|
f"Wikipedia-Kategorien: {wiki_kategorien}\n"
|
||||||
f"Website-Zusammenfassung: {website_summary}\n\n"
|
f"Website-Zusammenfassung: {website_summary}\n\n"
|
||||||
|
f"{target_schema_info}\n\n"
|
||||||
"Antworte im Format:\n"
|
"Antworte im Format:\n"
|
||||||
"Branche: <vorgeschlagene Branche>\n"
|
"Branche: <vorgeschlagene Branche>\n"
|
||||||
"Übereinstimmung: <ok oder X>\n"
|
"Übereinstimmung: <ok oder X>\n"
|
||||||
@@ -1555,6 +1587,7 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
debug_print("Fehler bei der ChatGPT-Anfrage: " + str(e))
|
debug_print("Fehler bei der ChatGPT-Anfrage: " + str(e))
|
||||||
return {"branch": "k.A.", "consistency": "X", "justification": "ChatGPT-Anfrage fehlgeschlagen."}
|
return {"branch": "k.A.", "consistency": "X", "justification": "ChatGPT-Anfrage fehlgeschlagen."}
|
||||||
|
|
||||||
|
# Parsen der Antwort von ChatGPT
|
||||||
suggested_branch = ""
|
suggested_branch = ""
|
||||||
consistency = ""
|
consistency = ""
|
||||||
justification = ""
|
justification = ""
|
||||||
@@ -1568,15 +1601,15 @@ def evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kateg
|
|||||||
|
|
||||||
debug_print(f"Ursprünglicher ChatGPT-Vorschlag: '{suggested_branch}', Übereinstimmung='{consistency}', Begründung='{justification}'")
|
debug_print(f"Ursprünglicher ChatGPT-Vorschlag: '{suggested_branch}', Übereinstimmung='{consistency}', Begründung='{justification}'")
|
||||||
|
|
||||||
|
# Entferne ggf. den Zusatz "CRM-Branche:" falls vorhanden
|
||||||
if suggested_branch.lower().startswith("crm-branche"):
|
if suggested_branch.lower().startswith("crm-branche"):
|
||||||
suggested_branch = suggested_branch.split(":", 1)[-1].strip()
|
suggested_branch = suggested_branch.split(":", 1)[-1].strip()
|
||||||
|
|
||||||
# Externen Vorschlag über das Mapping in den Zielstandard überführen
|
# Mapping anwenden: Externen Vorschlag in den standardisierten Zielwert überführen
|
||||||
mapped_branch = map_external_branch(suggested_branch)
|
mapped_branch = map_external_branch(suggested_branch)
|
||||||
debug_print(f"Nach Mapping erhalten: '{mapped_branch}'")
|
debug_print(f"Nach Mapping erhalten: '{mapped_branch}'")
|
||||||
|
|
||||||
# Hierarchie ergänzen: Falls der resultierende Mappingwert kein ">" enthält,
|
# Hierarchie ergänzen: Falls das Mapping keinen hierarchischen Trennstrich enthält und ein CRM-Präfix vorhanden ist
|
||||||
# wird der Präfix aus dem CRM-Wert übernommen (sofern vorhanden und sinnvoll)
|
|
||||||
if ">" not in mapped_branch and crm_branche.lower() != "k.a.":
|
if ">" not in mapped_branch and crm_branche.lower() != "k.a.":
|
||||||
prefix = crm_branche.split(">")[0].strip() if ">" in crm_branche else ""
|
prefix = crm_branche.split(">")[0].strip() if ">" in crm_branche else ""
|
||||||
if prefix:
|
if prefix:
|
||||||
|
|||||||
Reference in New Issue
Block a user