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}")
|
logging.error(f"Fehler beim Lesen der DOCX-Datei {filepath}: {e}")
|
||||||
return None
|
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):
|
def generate_extraction_prompt(content, data_to_extract):
|
||||||
"""Erstellt einen spezialisierten Prompt, um bestimmte Daten zu extrahieren."""
|
"""Erstellt einen spezialisierten Prompt, um bestimmte Daten zu extrahieren."""
|
||||||
prompts = {
|
prompts = {
|
||||||
@@ -130,11 +156,17 @@ def main():
|
|||||||
response_text = call_openai_with_retry(prompt)
|
response_text = call_openai_with_retry(prompt)
|
||||||
if response_text:
|
if response_text:
|
||||||
try:
|
try:
|
||||||
# Versuche, die YAML-Antwort zu parsen und dem branch_data Dict hinzuzufügen
|
# NEU: Erst den sauberen YAML-Teil extrahieren
|
||||||
parsed_yaml = yaml.safe_load(response_text)
|
clean_yaml_text = extract_yaml_from_response(response_text)
|
||||||
branch_data.update(parsed_yaml)
|
# Dann den sauberen Text parsen
|
||||||
except yaml.YAMLError as e:
|
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}")
|
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}"
|
branch_data[data_type] = f"PARSING-FEHLER: {response_text}"
|
||||||
time.sleep(2) # Pause zwischen API-Aufrufen
|
time.sleep(2) # Pause zwischen API-Aufrufen
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user