extract_insights.py aktualisiert
This commit is contained in:
@@ -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)
|
||||
# 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)
|
||||
except yaml.YAMLError as e:
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user