Till Fischer
Update all changes
5741580
# 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()