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:
@@ -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()
|
||||
Reference in New Issue
Block a user