# app.py import gradio as gr from analyze_aspects import analyze_quickwin, visualize_aspects from pathlib import Path import tempfile import shutil import os import nltk import logging # --- NLTK-DATEN-SETUP --- # Dieser Block stellt sicher, dass die notwendigen Daten beim Start des Spaces vorhanden sind. try: nltk.data.find('tokenizers/punkt') logging.info("NLTK 'punkt'-Daten bereits vorhanden.") except nltk.downloader.DownloadError: logging.info("NLTK 'punkt'-Daten nicht gefunden. Lade herunter...") nltk.download('punkt', quiet=True) # quiet=True verhindert zu viel Log-Ausgabe logging.info("NLTK 'punkt'-Daten erfolgreich heruntergeladen.") # --- ENDE NLTK-SETUP --- def run_analysis(db_file, isbn, languages): if not isbn.strip(): return "❗ Bitte ISBN angeben.", None with tempfile.TemporaryDirectory() as tmpdir: tmp_path = Path(tmpdir) / "db.sqlite" shutil.copy(db_file.name, tmp_path) # Analyse results = analyze_quickwin( db_path=tmp_path, isbn=isbn, device=-1, languages=languages ) if not results: return "⚠️ Keine relevanten Aspekte gefunden oder Fehler in der Analyse.", None # Diagramm erzeugen visualize_aspects(results, Path(tmpdir)) chart_path = Path(tmpdir) / "sentiment_aspekte.png" return "✅ Analyse abgeschlossen!", chart_path # Gradio Interface iface = gr.Interface( fn=run_analysis, inputs=[ gr.File(label="SQLite-Datenbank (.sqlite)", file_types=[".sqlite"]), gr.Text(label="ISBN", placeholder="z. B. 9783446264199"), gr.CheckboxGroup(choices=["de", "en"], label="Sprachen", value=["de"]) ], outputs=[ gr.Text(label="Status"), gr.Image(label="Sentiment-Diagramm", type="filepath") ], title="📖 Aspekt-Sentiment-Analyse", description="Lade eine SQLite-Datenbank hoch, gib eine ISBN an und analysiere die wichtigsten inhaltlichen Aspekte und deren Sentiment." ) iface.launch()