From 966be29b70aa57e5e5f2cf433d0ca0a2a9feaee1 Mon Sep 17 00:00:00 2001 From: Floke Date: Wed, 16 Jul 2025 08:06:30 +0000 Subject: [PATCH] extract_insights.py aktualisiert --- extract_insights.py | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/extract_insights.py b/extract_insights.py index cd89ba5e..265ef651 100644 --- a/extract_insights.py +++ b/extract_insights.py @@ -54,6 +54,32 @@ def read_docx_content(filepath): logging.error(f"Fehler beim Lesen der DOCX-Datei {filepath}: {e}") return None +def extract_yaml_from_response(response_text): + """ + Extrahiert sauberen YAML-Code aus einer KI-Antwort, + die Markdown-Codeblöcke enthalten kann. + """ + # Sucht nach dem Start des YAML-Codeblocks + if '```yaml' in response_text: + # Extrahiert den Teil nach dem ersten ```yaml + parts = response_text.split('```yaml', 1) + if len(parts) > 1: + response_text = parts[1] + + # Sucht nach dem Start eines generischen Codeblocks + elif '```' in response_text: + # Extrahiert den Teil nach dem ersten ``` + parts = response_text.split('```', 1) + if len(parts) > 1: + response_text = parts[1] + + # Entfernt das Ende des Codeblocks + if '```' in response_text: + response_text = response_text.split('```')[0] + + return response_text.strip() + + def generate_extraction_prompt(content, data_to_extract): """Erstellt einen spezialisierten Prompt, um bestimmte Daten zu extrahieren.""" prompts = { @@ -130,11 +156,17 @@ def main(): response_text = call_openai_with_retry(prompt) if response_text: try: - # Versuche, die YAML-Antwort zu parsen und dem branch_data Dict hinzuzufügen - parsed_yaml = yaml.safe_load(response_text) - branch_data.update(parsed_yaml) - except yaml.YAMLError as e: + # NEU: Erst den sauberen YAML-Teil extrahieren + clean_yaml_text = extract_yaml_from_response(response_text) + # Dann den sauberen Text parsen + parsed_yaml = yaml.safe_load(clean_yaml_text) + if parsed_yaml: # Sicherstellen, dass das Ergebnis nicht leer ist + branch_data.update(parsed_yaml) + else: + raise ValueError("Geparsstes YAML ist leer.") + except Exception as e: logging.error(f" Fehler beim Parsen der YAML-Antwort für '{data_type}': {e}") + # Speichere die *gesamte* ursprüngliche Antwort für Debugging-Zwecke branch_data[data_type] = f"PARSING-FEHLER: {response_text}" time.sleep(2) # Pause zwischen API-Aufrufen