v1.2.4 - Priorisierung nach Geschäfts-Relevanz & Keyword-Optimierung

- Das Priorisierungsmodell wurde grundlegend überarbeitet und orientiert sich nun an der tatsächlichen Häufigkeit und Relevanz der Departments, anstatt an semantischer Eindeutigkeit.
- Die `STOP_WORDS`-Liste wurde signifikant angepasst. Wichtige Signalwörter wie 'service', 'customer', 'care' und 'support' wurden entfernt, um die Erkennungsrate für 'Field Service Management' drastisch zu verbessern.
- Dies korrigiert systematische Fehlzuordnungen und stellt sicher, dass die generierte Wissensbasis die Geschäftsrealität korrekt abbildet.
This commit is contained in:
2025-09-19 08:58:06 +00:00
parent dbe65b993d
commit c91dbd6246

View File

@@ -1,6 +1,6 @@
# knowledge_base_builder.py
__version__ = "v1.2.2"
__version__ = "v1.2.4"
import logging
import json
@@ -19,55 +19,59 @@ SOURCE_SHEET_NAME = "CRM_Jobtitles"
EXACT_MATCH_OUTPUT_FILE = "exact_match_map.json"
KEYWORD_RULES_OUTPUT_FILE = "keyword_rules.json"
# --- NEU: Priorisierung nach Geschäfts-Relevanz ---
DEPARTMENT_PRIORITIES = {
"Fuhrparkmanagement": 1,
"Legal": 1,
"Baustofflogistik": 1,
"Baustoffherstellung": 1,
"Field Service Management / Kundenservice": 2,
"IT": 3,
# Tier 1: Kern-Fachabteilungen (geordnet nach Häufigkeit)
"Field Service Management / Kundenservice": 1,
"IT": 2,
"Logistik": 3,
"Production Maintenance / Wartung Produktion": 4,
"Utility Maintenance": 5,
"Procurement / Einkauf": 6,
"Supply Chain Management": 7,
"Finanzen": 8,
"Technik": 8,
"Management / GF / C-Level": 10,
"Logistik": 11,
"Vertrieb": 12,
"Transportwesen": 13,
"Berater": 20,
"Vertrieb": 7,
"Supply Chain Management": 8,
"Finanzen": 9,
"Technik": 10,
"Transportwesen": 11,
# Tier 2: Spezifische Nischen-Abteilungen (geordnet nach Häufigkeit)
"Fuhrparkmanagement": 15,
"Legal": 16,
"Baustofflogistik": 17,
"Baustoffherstellung": 18,
# Tier 3: Allgemeine, übergreifende Abteilungen
"Management / GF / C-Level": 20, # Muss niedriger als Fachabteilungen sein
# Tier 4: Auffang-Kategorien
"Berater": 25,
"Undefined": 99
}
BRANCH_GROUP_RULES = {
"bau": [
"Baustoffhandel", "Baustoffindustrie",
"Logistiker Baustoffe", "Bauunternehmen"
],
"versorger": [
"Stadtwerke", "Verteilnetzbetreiber",
"Telekommunikation", "Gase & Mineralöl"
],
"produktion": [
"Maschinenbau", "Automobil", "Anlagenbau", "Medizintechnik",
"Chemie & Pharma", "Elektrotechnik", "Lebensmittelproduktion",
"Bürotechnik", "Automaten (Vending, Slot)", "Gebäudetechnik Allgemein",
"Braune & Weiße Ware", "Fenster / Glas", "Getränke", "Möbel", "Agrar, Pellets"
]
"bau": ["Baustoffhandel", "Baustoffindustrie", "Logistiker Baustoffe", "Bauunternehmen"],
"versorger": ["Stadtwerke", "Verteilnetzbetreiber", "Telekommunikation", "Gase & Mineralöl"],
"produktion": ["Maschinenbau", "Automobil", "Anlagenbau", "Medizintechnik", "Chemie & Pharma", "Elektrotechnik", "Lebensmittelproduktion", "Bürotechnik", "Automaten (Vending, Slot)", "Gebäudetechnik Allgemein", "Braune & Weiße Ware", "Fenster / Glas", "Getränke", "Möbel", "Agrar, Pellets"]
}
MIN_SAMPLES_FOR_BRANCH_RULE = 5
# --- MODIFIZIERT: Schwellenwert auf 60% gesenkt ---
BRANCH_SPECIFICITY_THRESHOLD = 0.6
# --- OPTIMIERTE STOP_WORDS LISTE ---
STOP_WORDS = {
# Administrative Titelteile
'manager', 'leiter', 'head', 'lead', 'senior', 'junior', 'direktor', 'director',
'verantwortlicher', 'beauftragter', 'referent', 'sachbearbeiter', 'mitarbeiter',
'spezialist', 'specialist', 'expert', 'experte', 'consultant', 'berater',
'spezialist', 'specialist', 'expert', 'experte', 'consultant',
'assistant', 'assistenz', 'teamleiter', 'teamlead', 'abteilungsleiter',
'bereichsleiter', 'gruppenleiter', 'geschäftsführer', 'vorstand', 'ceo', 'cio',
'cfo', 'cto', 'coo', 'von', 'of', 'und', 'für', 'der', 'die', 'das', '&'
'cfo', 'cto', 'coo',
# Füllwörter
'von', 'of', 'und', 'für', 'der', 'die', 'das', '&',
# Zu allgemeine Begriffe, die aber Signalwörter überstimmen
'leitung', 'leiterin', 'teamleitung', 'gruppenleitung', 'bereichsleitung', 'abteilungsleitung',
'operations', 'business', 'development', 'zentrale', 'center'
# WICHTIG: 'service', 'customer', 'care', 'support' wurden bewusst entfernt!
}
def setup_logging():
@@ -78,7 +82,6 @@ def setup_logging():
return
log_level = logging.DEBUG
root_logger = logging.getLogger()
if root_logger.handlers:
for handler in root_logger.handlers[:]:
@@ -92,13 +95,10 @@ def setup_logging():
logging.StreamHandler()
]
)
logging.getLogger("gspread").setLevel(logging.WARNING)
logging.getLogger("oauth2client").setLevel(logging.WARNING)
logging.info(f"Logging erfolgreich initialisiert. Log-Datei: {log_filename}")
def build_knowledge_base():
logger = logging.getLogger(__name__)
logger.info(f"Starte Erstellung der Wissensbasis (Version {__version__})...")
@@ -190,7 +190,6 @@ def build_knowledge_base():
logger.info("Wissensbasis erfolgreich erstellt.")
if __name__ == "__main__":
setup_logging()
build_knowledge_base()