Projekt: Automatisierte Unternehmensbewertung & Lead-Generierung v2.2.1
1. Projektübersicht
Dieses Repository enthält eine Suite von Python-Skripten zur automatisierten Anreicherung und Analyse von Unternehmensdaten. Das System ist modular aufgebaut und für den Betrieb in einem Docker-Container ausgelegt.
brancheneinstufung.py: Das Kernmodul zur Datenanreicherung (Web, Wikipedia, KI-Analyse).duplicate_checker.py: Ein Modul zur intelligenten Duplikatsprüfung.generate_marketing_text.py: Eine Engine zur Erstellung personalisierter Marketing-Texte.app.py& Docker: Eine fernsteuerbare Schnittstelle via Google Sheets.
2. Aktueller Status: KRITISCHER FEHLER (BLOCKER)
Das gesamte System ist derzeit nicht lauffähig. Ein Inkompatibilitätsproblem zwischen dem bestehenden Code und der installierten Version der openai-Python-Bibliothek führt zu einem ModuleNotFoundError bei jedem Versuch, eine KI-Funktion aufzurufen. Dies verhindert jegliche Weiterentwicklung und Nutzung.
3. Nächster Schritt
Priorität 1: Behebung des openai-Abhängigkeitskonflikts. Die gewählte Strategie ist ein gezieltes Downgrade der openai-Bibliothek auf eine mit dem Code kompatible Version, um die Funktionalität schnellstmöglich wiederherzustellen.
planning.md (v2.2.1)
code
Markdown
Projektplanung v2.2.1
1. Aktueller Stand
- [X] Architektur & Module: Alle Kernmodule sind konzipiert und implementiert.
- [!] System-Blocker: Ein Versionskonflikt der
openai-Bibliothek legt das gesamte System lahm. Alle Funktionen, die auf die KI zugreifen, stürzen mit einemModuleNotFoundErrorab.
2. Strategischer Plan
Phase 1: Stabilität wiederherstellen (Hotfix)
- [ ] Schritt 1.1 (Analyse): Überprüfung aller Code-Stellen, die
openai-Fehlerklassen importieren oder verwenden, um den Umfang des Problems zu bestätigen. - [ ] Schritt 1.2 (Downgrade): Modifikation der
requirements.txt, um dieopenai-Bibliothek auf eine stabile, kompatible Version (z.B.0.28.0) festzuschreiben. - [ ] Schritt 1.3 (Anwendung): Neubau des Docker-Images (
docker build), um die Installation der korrekten Bibliotheksversion zu erzwingen. - [ ] Schritt 1.4 (Validierung): Durchführung eines Testlaufs (z.B.
reclassify_branches), um zu bestätigen, dass derModuleNotFoundErrorbehoben ist und die KI-Aufrufe wieder funktionieren.
Phase 2: Geplante Weiterentwicklung (nach Hotfix)
- [ ] Finalisierung des Duplikats-Checks.
- [ ] Vervollständigung der Wissensbasis und Generierung aller Marketing-Texte.
- [ ] (Zukünftig) Planung des Code-Refactorings, um die neue
openaiv1.x API zu unterstützen.
Automatisierte Unternehmensbewertung & Lead-Generierung
Version: 2.1.0 (nach Implementierung des Sync-Moduls)
Projektbeschreibung
Dieses Projekt automatisiert die Anreicherung von Unternehmensdaten aus einem D365-CRM-System. Es nutzt externe APIs (Google, Wikipedia, OpenAI) und Web-Scraping, um Stammdaten zu validieren, zu ergänzen und neue, marketing-relevante Informationen (z.B. FSM-Pitches) zu generieren. Die Verarbeitung und Speicherung der angereicherten Daten erfolgt in einem Google Sheet.
Aktueller Status (August 2025)
- Systemstabilität: Das System ist nach der Behebung von Inkompatibilitäten mit der OpenAI-Bibliothek stabil und voll lauffähig.
- Daten-Import: Ein robuster, intelligenter Synchronisations-Mechanismus (
sync_manager.py) wurde implementiert. Er gleicht einen vollständigen D365-Excel-Export mit dem Google Sheet ab, aktualisiert Stammdaten nach definierten Fachregeln und markiert Datensätze für die Neu-Anreicherung. - Kernfunktionen: Datenanreicherung (Wikipedia, Website-Scraping) und KI-basierte Analysen (Brancheneinstufung, Text-Zusammenfassungen) sind operational.
- Nächster Schritt: Implementierung des Daten-Exports aus dem Google Sheet zur Aktualisierung des D365-Systems.
Duplicate Checker (duplicate_checker_old.py)
Hauptfunktion
Das Skript duplicate_checker_old.py (Version 2.15) ist ein spezialisiertes Werkzeug zur Identifizierung von potenziellen Duplikaten zwischen zwei Unternehmenslisten in Google Sheets: einer Matching-Liste (Matching_Accounts) und einer Referenz-CRM-Liste (CRM_Accounts). Es verwendet einen gewichteten, heuristischen Algorithmus, um für jeden Eintrag in der Matching-Liste den wahrscheinlichsten Treffer im CRM-Bestand zu finden und bewertet diesen mit einem numerischen Score.
Abhängigkeiten
pandas: Zur Datenmanipulation und -analyse.thefuzz: Für Fuzzy-String-Vergleiche zur Bewertung der Namensähnlichkeit.gspread,oauth2client: Für die Interaktion mit der Google Sheets API.- Lokale Module:
helpers.py: Stellt Normalisierungsfunktionen (normalize_company_name,simple_normalize_url) und eine optionale Web-Suche (serp_website_lookup) bereit.config.py: Zentralisiert Konfigurationswerte und API-Schlüssel.google_sheet_handler.py: Kapselt die Logik für den Zugriff auf Google Sheets.
Konfiguration
Die Logik des Skripts wird durch mehrere Konstanten am Anfang der Datei gesteuert:
- Sheet-Namen:
CRM_SHEET_NAMEundMATCHING_SHEET_NAME. - Score-Schwellenwerte:
SCORE_THRESHOLD(Standard: 80) undSCORE_THRESHOLD_WEAK(95), ein strengerer Wert für Treffer ohne starke Indikatoren wie Domain- oder Standortübereinstimmung. - Penalties:
CITY_MISMATCH_PENALTY(30) undCOUNTRY_MISMATCH_PENALTY(40) werden vom Score abgezogen, wenn Standorte voneinander abweichen. - Prefiltering:
PREFILTER_MIN_PARTIAL(70) undPREFILTER_LIMIT(30) zur Vorauswahl potenzieller Kandidaten, um die Performance zu verbessern. - Stop-Wörter:
STOP_TOKENS_BASEundCITY_TOKENS(dynamisch generiert) enthalten Begriffe, die bei Namensvergleichen ignoriert werden, um die Signalqualität zu erhöhen.
Ablauf-Logik
- Initialisierung: Das Skript richtet das Logging ein, lädt API-Schlüssel (optional für SerpAPI) und initialisiert den
GoogleSheetHandler. - Daten laden: Die Daten aus den beiden Google Sheets (
CRM_AccountsundMatching_Accounts) werden in Pandas DataFrames geladen. - SerpAPI-Fallback (Optional): Für Einträge in der Matching-Liste ohne Website wird versucht, über die SerpAPI eine URL zu finden. Das Vertrauen in die gefundene URL wird bewertet (
hoch,mittel,niedrig). - Normalisierung: Unternehmensnamen, Domains, Orte und Länder in beiden DataFrames werden standardisiert (z.B. Kleinschreibung, Entfernung von Rechtsformzusätzen).
- Index-Erstellung: Zur Optimierung der Suche werden mehrere "Blocking"-Indizes aus den CRM-Daten erstellt:
- Ein
domain_indexfür schnelle Suchen über die Website-Domain. - Ein
token_indexfür die Suche nach einzelnen Namensbestandteilen. - Eine
token_freqZählung, um seltene und damit aussagekräftige Namensbestandteile zu identifizieren.
- Ein
- Iteratives Matching: Das Skript durchläuft jeden Datensatz der Matching-Liste:
a. Kandidatenauswahl: Anstatt jeden Eintrag mit der gesamten CRM-Liste zu vergleichen, wird eine kleine, relevante Untergruppe von Kandidaten ausgewählt. Die Auswahl erfolgt priorisiert: zuerst über Domain-Übereinstimmung, dann über den seltensten Namens-Token und zuletzt über einen allgemeinen Prefilter.
b. Scoring: Jeder Kandidat wird mit dem aktuellen Matching-Datensatz verglichen. Die Funktion
calculate_similarityberechnet einen Score basierend auf einer gewichteten Formel, die Namensähnlichkeit, Domain-Match, Standortübereinstimmung, Boni und Strafen berücksichtigt. c. Bester Treffer: Der Kandidat mit dem höchsten Score wird als potenzielles Duplikat ausgewählt. - Ergebnis-Aggregation: Die Ergebnisse (bester Treffer, Score, Begründung der Bewertung) werden gesammelt.
- Daten zurückschreiben: Die Matching-Liste wird um die Ergebnisspalten (
Match,Score,Match_Grund) erweitert und vollständig in das Google SheetMatching_Accountszurückgeschrieben. Ein lokales CSV-Backup wird ebenfalls erstellt.