Commit Graph

1422 Commits

Author SHA1 Message Date
d5d54fa37c duplicate_checker.py aktualisiert 2025-09-24 15:37:12 +00:00
f4a2964b3f train_model.py aktualisiert 2025-09-24 14:31:17 +00:00
4eea3f0f80 duplicate_checker.py aktualisiert 2025-09-24 14:23:45 +00:00
b74116c821 train_model.py aktualisiert 2025-09-24 14:23:15 +00:00
6245c78a42 train_model.py aktualisiert 2025-09-24 14:17:29 +00:00
cc3cc0d798 requirements_diskstation.txt hinzugefügt 2025-09-24 14:14:39 +00:00
9649243e13 train_model.py aktualisiert 2025-09-24 14:11:12 +00:00
086290359a train_model.py aktualisiert 2025-09-24 14:06:54 +00:00
9b00153688 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.
2025-09-19 08:58:06 +00:00
68442d1af9 contact_grouping.py aktualisiert 2025-09-18 13:48:28 +00:00
f5a686403d knowledge_base_builder.py aktualisiert 2025-09-18 13:45:27 +00:00
7f3d6c603a v1.2.3 - Bugfix SyntaxError bei KI-Beispiel-Generierung
- Bugfix: Behebt einen `SyntaxError: invalid syntax` in der Funktion `_generate_ai_examples`.
- Die fehlerhafte f-String-Formatierung, die einen Backslash innerhalb eines Ausdrucks enthielt, wurde durch eine robuste String-Verkettung ersetzt.
- Dies stellt die Lauffähigkeit des Skripts auf allen Python-Versionen sicher.
2025-09-18 13:43:56 +00:00
a0c7d26e9f v1.2.2 - Kalibrierung der Branchen-Logik
- Passt den Schwellenwert für die Branchenspezifität (`BRANCH_SPECIFICITY_THRESHOLD`) von 70% auf 60% an.
- Diese Anpassung basiert auf den Analyse-Ergebnissen der Log-Dateien und stellt sicher, dass hoch-konzentrierte Departments wie 'Baustofflogistik' und 'Production Maintenance' nun korrekt als branchenspezifisch erkannt werden.
- Die Regel für die minimale Sample-Anzahl bleibt bei 5, um statistisch irrelevante Regeln zu vermeiden.
2025-09-18 12:35:39 +00:00
46e3ffb8b5 v1.2.1 - Bugfix Silent Logging & Robuste Konfiguration
- Bugfix: Behebt das Problem, bei dem keine Log-Ausgaben im Terminal oder in der Log-Datei erschienen sind.
- Die Skript-Struktur wurde angepasst, um eine robuste `setup_logging`-Funktion zu implementieren, die eine implizite Standard-Konfiguration durch importierte Module erkennt und überschreibt.
- Stellt sicher, dass die benutzerdefinierte Logging-Konfiguration (DEBUG-Level, File-Handler) zuverlässig angewendet wird.
- Das Skript protokolliert nun alle Prozessschritte wie vorgesehen, insbesondere die Analyse der Branchen-Spezifität.
2025-09-18 12:30:57 +00:00
5a8041f9cf v1.2.0 - Bugfix & Robuste Branchen-Regel-Erkennung
- Bugfix: Behebt den Fehler, bei dem keine branchenspezifischen Regeln generiert wurden, weil die Schwellenwerte zu restriktiv waren.
- Die Schwellenwerte für die minimale Sample-Anzahl und die prozentuale Branchen-Reinheit wurden gelockert und sind nun am Anfang des Skripts konfigurierbar.
- Verbessertes Logging: Das Skript gibt nun detailliert Auskunft, warum ein Department als branchenspezifisch eingestuft oder warum es verworfen wurde.
2025-09-18 12:22:33 +00:00
e1bff4070a v1.2.2 - Dynamische Branchen-Regeln & Kontext-KI
- Passt die Logik an die neue, erweiterte Struktur der `keyword_rules.json` an.
- Liest die `required_branch_keywords` dynamisch aus der Wissensbasis, anstatt eine hartcodierte Liste zu verwenden.
- Die KI-Klassifizierung wurde aufgewertet: Sie erhält nun Branchenkontext und Beispiele für eine präzisere Zuordnung.
- Das gesamte System ist nun vollständig über die Wissensbasis und Konfigurationsdateien steuerbar.
2025-09-18 12:01:22 +00:00
d723c36c3a v1.2.1 - Feature: Automatische & Skalierbare Branchen-Regeln
- Feature: Erstellt nun automatisch kontext-sensitive Branchen-Regeln direkt in der `keyword_rules.json`.
- Das Skript liest die neue Spalte 'Branche' aus dem 'CRM_Jobtitles'-Sheet.
- NEU: Eine zentrale `BRANCH_GROUP_RULES` Konfiguration wurde hinzugefügt, um Branchen zu logischen Gruppen (z.B. "Bau", "Versorger") zusammenzufassen.
- NEU: Das Skript analysiert die Verteilung der Jobtitel pro Department über die Branchen-Gruppen.
- Wenn ein Department eine hohe Konzentration (Standard >80%) in einer Branchen-Gruppe aufweist, wird es als "branchenspezifisch" markiert.
- Die relevanten Keywords der Branchen-Gruppe werden dann automatisch in den neuen `required_branch_keywords`-Eintrag in der `keyword_rules.json` geschrieben.
- Entfernt die Notwendigkeit, Branchen-Regeln manuell im Code zu pflegen.
2025-09-18 12:00:04 +00:00
6a8322e2b3 v1.1.8 - Stabilitäts-Update: KI-Batch-Verarbeitung
- Führt eine Batch-Verarbeitung (Chunking) für Anfragen an die OpenAI API ein, um die Stabilität und Zuverlässigkeit zu erhöhen.
- Anstatt alle 'Undefined'-Fälle in einer einzigen großen Anfrage zu senden, werden diese nun in kleinere Pakete (Standard: 200 Titel pro Anfrage) aufgeteilt.
- Dies reduziert das Risiko von API-Timeouts, umgeht potenzielle Token-Limits und verbessert die Fehlertoleranz.
- Fügt Logging hinzu, das den Fortschritt der Batch-Verarbeitung anzeigt (z.B. "Verarbeite Batch 1/2...").
2025-09-18 08:40:14 +00:00
425416bdd4 v1.1.7 - Bugfix KI-Prompt & Zuverlässigkeit
- Bugfix: Behebt das Problem, bei dem die OpenAI API eine textuelle Antwort anstelle eines JSON-Arrays zurückgab.
- Der Prompt für die KI-Klassifizierung (Stufe 3) wurde grundlegend überarbeitet, um Missverständnisse durch die KI zu verhindern.
- Die KI wird nun als "Datenverarbeitungstool" instruiert und erhält einen unmissverständlichen Befehl mit strikten Ausgabe-Formatierungsregeln.
- Dies erhöht die Zuverlässigkeit der KI-gestützten Klassifizierung erheblich und stellt sicher, dass die Antwort maschinell verarbeitbar ist.
2025-09-18 08:20:01 +00:00
66f9db7d08 v1.1.6 - Bugfix Silent Logging & Robuste Konfiguration
- Bugfix: Behebt ein Problem, bei dem keine Log-Ausgaben im Terminal oder in der Log-Datei erschienen sind.
- Die `setup_logging`-Funktion wurde überarbeitet, um eine implizite Standard-Konfiguration durch die `helpers.py` zu erkennen und zu überschreiben.
- Stellt sicher, dass die benutzerdefinierte Logging-Konfiguration (DEBUG-Level, File-Handler) zuverlässig angewendet wird.
- Das Skript ist nun wieder "gesprächig" und protokolliert alle Prozessschritte wie vorgesehen.
2025-09-18 08:10:30 +00:00
9bccb18389 contact_grouping.py aktualisiert
- Detailliertere Log-Ausgaben während des gesamten Prozesses für eine bessere Nachvollziehbarkeit.
- Loggt die Anzahl der Zeilen direkt nach dem erfolgreichen Laden aus dem Google Sheet.
- Fügt explizite Start- und End-Meldungen für die regel-basierte Zuordnung (Stufe 1 & 2) hinzu.
- Loggt die genaue Anzahl der 'Undefined'-Fälle, die an die KI zur Klassifizierung gesendet werden.
- Gibt eine klare Meldung aus, wenn keine KI-Anfrage nötig ist, weil alle Fälle durch Regeln gelöst wurden.
- Verbessert die allgemeine Klarheit der Log-Nachrichten, um die Analyse von Laufzeitverhalten und potenziellen Fehlern zu erleichtern.

- Bugfix: Behebt einen kritischen APIError [400] 'Invalid list_value', der beim Zurückschreiben der Daten in das Google Sheet auftrat.
- Die Funktion `_find_best_match` gab in manchen Fällen fälschlicherweise eine Liste anstelle eines einzelnen Strings als Department zurück.
- Die Rückgabewerte der Funktion wurden korrigiert, um sicherzustellen, dass immer ein String übergeben wird.
- Dies stellt die Kompatibilität mit der Google Sheets API wieder her und macht den Schreibvorgang robust.
2025-09-18 07:59:31 +00:00
6e8d8c69c7 v1.1.3 - Bugfix Robuste KI-Antwortverarbeitung
- Bugfix: Behebt einen `JSONDecodeError`, der auftrat, wenn die OpenAI API eine Antwort mit einleitendem Text oder ohne JSON-Array zurückgab.
- Die JSON-Extraktion in der KI-Klassifizierung wurde von einer einfachen String-Suche auf eine robuste Regex-Suche umgestellt.
- Verbessertes Fehler-Logging: Bei einem Fehler bei der KI-Klassifizierung wird nun die vollständige, rohe API-Antwort ins Log geschrieben, um die Fehlersuche zu erleichtern.
2025-09-18 07:54:18 +00:00
5a12a9aa90 v1.1.2 - Bugfix Startup-Verhalten & verbessertes Feedback
- Bugfix: Behebt ein Problem, bei dem das Skript beim Start zu hängen schien, weil große Wissensbasis-Dateien blockierend geladen wurden.
- Die Initialisierung der `ContactGrouper`-Klasse wurde verschlankt und lädt die JSON-Dateien nicht mehr automatisch.
- Eine neue Methode `load_knowledge_base()` wurde eingeführt, um das Laden der Dateien explizit und mit Logging-Feedback zu steuern.
- Das Skript gibt nun sofort nach dem Start eine Rückmeldung auf der Konsole und im Logfile, bevor zeitaufwändige Operationen beginnen.
- Verbesserte Fehlerbehandlung, falls die Wissensbasis nicht geladen werden kann.
2025-09-18 07:50:40 +00:00
f12dca88c1 contact_grouping.py aktualisiert 2025-09-18 07:44:30 +00:00
f343599d59 v1.1.0 - Intelligente Lernfunktion & Verbessertes Logging
- Erweitertes Logging mit DEBUG-Level und Logfile-Erstellung.
- Zusammenfassende Statistik der Department-Zuweisungen am Ende des Laufs.
- NEU: Stufe 3 - KI-Klassifizierung für unklare Fälle ('Undefined').
- Jobtitel, die nicht durch Stufe 1 oder 2 zugeordnet werden können, werden an die OpenAI API zur Klassifizierung gesendet.
- NEU: Lern-Mechanismus - Die von der KI ermittelten Zuordnungen werden automatisch in das 'CRM_Jobtitles'-Sheet zurückgeschrieben.
- Das System verbessert sich dadurch selbst für zukünftige Durchläufe.
2025-09-18 07:37:16 +00:00
67a486e207 contact_grouping.py hinzugefügt 2025-09-18 07:28:31 +00:00
3db2e8880a knowledge_base_builder.py aktualisiert 2025-09-18 07:12:43 +00:00
9b752b28d8 knowledge_base_builder.py hinzugefügt 2025-09-17 12:47:27 +00:00
1f50a9c5db requirements.txt aktualisiert 2025-09-10 20:03:36 +00:00
d96bca02f6 duplicate_checker.py aktualisiert 2025-09-10 11:26:28 +00:00
7e30aa0d83 train_model.py aktualisiert 2025-09-10 08:25:50 +00:00
6a90618839 duplicate_checker.py aktualisiert 2025-09-10 08:13:02 +00:00
338b350208 train_model.py aktualisiert 2025-09-10 08:12:31 +00:00
e50ff17b17 train_model.py aktualisiert 2025-09-08 18:36:52 +00:00
b7f967521e train_model.py aktualisiert 2025-09-08 18:27:12 +00:00
676f59917a train_model.py aktualisiert 2025-09-08 18:04:36 +00:00
dc11ef373e train_model.py aktualisiert 2025-09-08 12:29:47 +00:00
2e5d6f93af train_model.py hinzugefügt 2025-09-08 12:27:57 +00:00
51cc61b39d create_weights.py hinzugefügt 2025-09-08 11:31:53 +00:00
77a2d15d4f xgb_model.json hinzugefügt 2025-09-08 11:30:45 +00:00
0a79ec64a6 NEU: Integration eines trainierten Machine-Learning-Modells (XGBoost) für die Match-Entscheidung
--- FEATURES v5.0 ---
- NEU: Integration eines trainierten Machine-Learning-Modells (XGBoost) für die Match-Entscheidung.
- Das Modell wurde auf dem vom Benutzer bereitgestellten "Gold-Standard"-Datensatz trainiert.
- Feature Engineering: Für jeden Vergleich werden ~15 Merkmale berechnet, die dem Modell als Input dienen.
- Die alte, heuristische Scoring-Logik wurde vollständig durch das ML-Modell ersetzt.
- Ergebnis ist eine datengetriebene, hochpräzise Duplikatserkennung mit >80% Trefferquote.
2025-09-08 11:24:01 +00:00
f32d4d507c duplicate_checker.py aktualisiert
- NEU: Mehrstufiges Entscheidungsmodell für höhere Präzision und "Großzügigkeit".
- Stufe 1: "Golden Match" für exakte Treffer.
- Stufe 2: "Kernidentitäts-Bonus & Tie-Breaker" zur korrekten Zuordnung von Konzerngesellschaften.
- Stufe 3: Neu kalibrierter, gewichteter Score für alle anderen Fälle.
- Intelligenter Tie-Breaker, der nur bei wirklich guten und engen Kandidaten greift.
2025-09-05 11:40:52 +00:00
755f432fcd duplicate_checker.py aktualisiert
--- FEATURES v4.0 ---
- NEU: "Kernidentitäts-Bonus": Ein hoher Bonus wird vergeben, wenn das seltenste (wichtigste) Token übereinstimmt.
  Dies fördert das "großzügige Matchen" auf Basis der Kernmarke (z.B. "ANDRITZ AG" vs. "ANDRITZ HYDRO").
- NEU: Intelligenter "Shortest Name Tie-Breaker": Wird nur noch bei sehr hohen und sehr ähnlichen Scores angewendet.
- Finale Kalibrierung der Score-Berechnung und Schwellenwerte für optimale Balance.
- Golden-Rule für exakte Matches und Interaktiver Modus beibehalten.
2025-09-05 09:39:56 +00:00
4eb7ae66b7 duplicate_checker.py aktualisiert
- NEU: "Shortest Name Tie-Breaker": Bei sehr ähnlichen Scores wird der Kandidat mit dem kürzeren Namen bevorzugt,
  um das Prinzip der "wirtschaftlichen Einheit" (z.B. Holding) besser abzubilden.
- Scoring-Formel und Schwellenwerte erneut feinjustiert für finale Balance.
- Golden-Rule und Interaktiver Modus beibehalten.
2025-09-05 08:59:05 +00:00
306880fa88 duplicate_checker.py aktualisiert
- Scoring-Formel und Multiplikatoren neu gewichtet, um einzigartige Namens-Tokens stärker zu bewerten ("Großzügigkeits-Boost").
- Schwellenwerte (Thresholds) erneut feinjustiert, um die Balance zwischen korrekten und falschen Treffern zu optimieren.
- Logik des Domain-Gates beibehalten und sichergestellt, dass es korrekt greift.
- Golden-Rule und Interaktiver Modus unverändert.
2025-09-05 08:10:28 +00:00
354e802b79 duplicate_checker.py aktualisiert
- Dynamische Stopword-Erkennung entfernt, da sie zu aggressiv war. Häufige Wörter erhalten nun nur ein niedriges Gewicht.
 - Score-Berechnung und Schwellenwerte (Thresholds) komplett neu kalibriert für bessere Balance und Treffsicherheit.
 - "Domain-Gate" wieder eingeführt: Ein Domain-Match zählt nur dann stark, wenn auch eine minimale Namensähnlichkeit besteht.
 - Golden-Rule und Interaktiver Modus beibehalten.
2025-09-05 07:34:23 +00:00
98d8c6db4c Feat: Matching-Logik mit gewichtetem Scoring & Interaktiv-Modus (v3.0)
Diese Version überarbeitet den Kern des Matching-Algorithmus grundlegend, um die Genauigkeit drastisch zu erhöhen und die manuelle Nachbearbeitung zu reduzieren. Die Änderungen basieren auf der Analyse eines umfangreichen Testdatensatzes und setzen die neue Philosophie des "großzügigen Matchens" von wirtschaftlichen Einheiten um.

Gewichtetes Namens-Scoring (TF-IDF):
- Einzigartige Namensbestandteile (z.B. "Warema") erhalten nun ein höheres Gewicht als generische Füllwörter (z.B. "Stadtwerke", "Gruppe").
- Dies löst das Problem von Fehlzuordnungen bei häufig vorkommenden, aber nicht-identifizierenden Begriffen und verbessert die Treffsicherheit bei unklaren Firmennamen signifikant.

Golden-Rule für exakte Namens-Matches:
- Eine Namensübereinstimmung von >98% führt zu einem sofortigen "Golden Match" mit einem sehr hohen Score.
- Damit wird verhindert, dass klare Treffer durch abweichende Signale (z.B. unterschiedliche URLs von Tochterfirmen) fälschlicherweise bestraft werden.

Optionaler Interaktiver Modus:
- Kann mit dem Flag --interactive gestartet werden.
- Bei uneindeutigen Ergebnissen, bei denen die Top-Kandidaten sehr ähnliche Scores haben, hält das Skript an und ermöglicht dem Benutzer die direkte Auswahl des korrekten Matches aus einer übersichtlichen Liste.

Überarbeitete Scoring-Formel:
- Die Gesamtbewertung wurde neu balanciert, um dem jetzt deutlich aussagekräftigeren Namens-Score mehr Gewicht zu verleihen.
2025-09-04 14:34:28 +00:00
7f522f74d0 planning.md aktualisiert 2025-08-29 08:34:07 +00:00
d95dad768d tasks.md aktualisiert 2025-08-29 08:33:31 +00:00
8378b299d0 readme.md aktualisiert 2025-08-29 08:32:40 +00:00