This commit is contained in:
2025-06-30 11:41:09 +00:00
parent 0e63aa3823
commit 68b43d099b

View File

@@ -58,20 +58,15 @@ class DataProcessor:
def __init__(self, sheet_handler, wiki_scraper):
"""
Initialisiert den DataProcessor mit Instanzen von Handler-Klassen.
Die eigentliche Konfiguration erfolgt in der setup() Methode.
"""
self.logger = logging.getLogger(__name__ + ".DataProcessor")
self.logger.info("Initialisiere DataProcessor...")
if not isinstance(sheet_handler, GoogleSheetHandler):
self.logger.critical(
"DataProcessor Init FEHLER: Kein gueltiger GoogleSheetHandler uebergeben!")
raise ValueError(
"DataProcessor benoetigt eine gueltige GoogleSheetHandler Instanz.")
raise ValueError("DataProcessor benötigt eine gültige GoogleSheetHandler Instanz.")
if not isinstance(wiki_scraper, WikipediaScraper):
self.logger.critical(
"DataProcessor Init FEHLER: Kein gueltiger WikipediaScraper uebergeben!")
raise ValueError(
"DataProcessor benoetigt eine gueltige WikipediaScraper Instanz.")
raise ValueError("DataProcessor benötigt eine gültige WikipediaScraper Instanz.")
self.sheet_handler = sheet_handler
self.wiki_scraper = wiki_scraper
@@ -79,18 +74,30 @@ class DataProcessor:
self.model = None
self.imputer = None
self._expected_features = None
self.is_setup_complete = False
self.logger.info("DataProcessor initialisiert mit Handlern.")
self.logger.info("DataProcessor-Instanz erstellt. Bereit für Setup.")
self._step_status_map = {
'wiki_verify': "Wiki Verif. Timestamp",
'website_scrape': "Website Scrape Timestamp",
'summarize_website': "Website Scrape Timestamp",
'branch_eval': "Timestamp letzte Pruefung",
'find_wiki_serp': "SerpAPI Wiki Search Timestamp",
'contact_search': "Contact Search Timestamp",
'wiki_updates_from_chatgpt': "Chat Wiki Konsistenzpruefung",
}
def setup(self):
"""
Führt die notwendigen Initialisierungen durch, die von externen Konfigurationen abhängen.
Muss nach Config.load_api_keys() aufgerufen werden.
"""
self.logger.info("Führe DataProcessor-Setup durch...")
# Lade das Branchenschema explizit.
schema_loaded = load_target_schema()
if not schema_loaded:
self.logger.error("Setup fehlgeschlagen: Branchenschema konnte nicht geladen werden.")
self.is_setup_complete = False
return False
# Lade das ML-Modell.
self._load_ml_model(MODEL_FILE, IMPUTER_FILE)
# Überprüfen, ob das Modell geladen wurde, ist optional, da _load_ml_model bereits loggt.
self.is_setup_complete = True
self.logger.info("DataProcessor-Setup erfolgreich abgeschlossen.")
return True
def _get_cell_value_safe(self, row, column_key):
"""
@@ -5417,13 +5424,10 @@ class DataProcessor:
self.logger.debug(
f"Versuche ML-Schaetzung fuer Zeile ({company_name[:50]}...)")
if self.model is None or self.imputer is None or self._expected_features is None:
self.logger.info("Lade ML-Modell, Imputer und Feature-Spalten...")
self._load_ml_model(MODEL_FILE, IMPUTER_FILE)
if self.model is None or self.imputer is None or self._expected_features is None:
self.logger.error(
"Laden von Modell, Imputer oder Feature-Spalten fehlgeschlagen.")
return "FEHLER Schaetzung (Modell-Laden)"
# Die Überprüfung findet jetzt in der setup() Methode statt.
if not self.is_setup_complete or self.model is None:
self.logger.error("ML-Modell nicht initialisiert. Setup nicht ausgeführt oder fehlgeschlagen. Überspringe Vorhersage.")
return "FEHLER Schaetzung (Setup fehlt)"
try:
# === Feature Erstellung (muss exakt zum Training passen!) ===