schneegriesel commited on
Commit
4ec7d16
·
0 Parent(s):

Demo Version, 1 sentence

Browse files
Files changed (6) hide show
  1. .gitignore +9 -0
  2. Dockerfile +27 -0
  3. README.md +35 -0
  4. app.py +53 -0
  5. requirements.txt +8 -0
  6. start_app.sh +14 -0
.gitignore ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ __pycache__/
2
+ *.pyc
3
+ *.pyo
4
+ *.log
5
+ *.sqlite3
6
+ .venv
7
+ .git
8
+ .gradio
9
+
Dockerfile ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.12.3
2
+
3
+ # Systempakete installieren
4
+ RUN apt-get update && apt-get install -y \
5
+ build-essential \
6
+ curl \
7
+ git \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ # Arbeitsverzeichnis setzen
11
+ WORKDIR /app
12
+
13
+ # Dateien kopieren
14
+ COPY requirements.txt .
15
+ COPY main.py .
16
+ COPY texts.txt .
17
+
18
+ # requirements.txt installieren
19
+
20
+ RUN pip install --upgrade pip setuptools wheel
21
+ RUN pip install -r requirements.txt
22
+
23
+ # spaCy Sprachmodell (Deutsch) installieren
24
+ RUN python -m spacy download de_core_news_sm
25
+
26
+ # Startbefehl
27
+ CMD ["python", "main.py"]
README.md ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: NER + Sentiment Analyse (Deutsch)
3
+ emoji: 🧠
4
+ colorFrom: gray
5
+ colorTo: gray
6
+ sdk: gradio
7
+ sdk_version: 5.49.1
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ # 🧠 NER + Sentiment Analyse für deutsche Texte
13
+
14
+ Dieser Space kombiniert Named Entity Recognition (NER) mit Sentimentanalyse für deutsche Texte. Die App nutzt spaCy zur Erkennung von Entitäten und ein BERT-Modell zur Bewertung der Stimmung einzelner Sätze.
15
+
16
+ ## 🔍 Funktionen
17
+
18
+ - **Entitäten erkennen**: Personen, Organisationen, Orte u.v.m.
19
+ - **Sentiment analysieren**: Positiv, Neutral oder Negativ pro Satz
20
+ - **Verknüpfung**: Entitäten werden **nur mit dem Sentiment des gleichen Satzes** verbunden
21
+ - **Interaktive Eingabe**: Gib deinen Text direkt im Browser ein und erhalte eine strukturierte Tabelle
22
+
23
+ ## 🛠️ Technologien
24
+
25
+ - spaCy – NER mit deutschem Sprachmodell
26
+ - Transformers – Sentimentanalyse mit `oliverguhr/german-sentiment-bert`
27
+ - Gradio – Webinterface für die Demo
28
+
29
+ ## 📦 Installation (lokal)
30
+
31
+ Falls du die App lokal ausführen möchtest:
32
+
33
+ ```bash
34
+ pip install -r requirements.txt
35
+ python app.py
app.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import spacy
2
+ import pandas as pd
3
+ from transformers import pipeline
4
+ import gradio as gr
5
+ import subprocess
6
+ import sys
7
+
8
+ # Versuche, spaCy zu laden – falls nicht vorhanden, lade es herunter
9
+ try:
10
+ nlp = spacy.load("de_core_news_sm")
11
+ except OSError:
12
+ subprocess.run([sys.executable, "-m", "spacy", "download", "de_core_news_sm"])
13
+ nlp = spacy.load("de_core_news_sm")
14
+
15
+ # Lade Sentimentmodell, cache lokal
16
+ sentiment_analyzer = pipeline(
17
+ "sentiment-analysis",
18
+ model="oliverguhr/german-sentiment-bert"
19
+ )
20
+
21
+ def link_entities_with_sentiment(text):
22
+ doc = nlp(text)
23
+ sentences = list(doc.sents)
24
+ entity_sentiment_links = []
25
+
26
+ for i, sentence in enumerate(sentences):
27
+ entities = [(ent.text, ent.label_) for ent in sentence.ents]
28
+ sentiment = sentiment_analyzer(sentence.text)[0]
29
+
30
+ for ent_text, ent_label in entities:
31
+ entity_sentiment_links.append({
32
+ "Entity": ent_text,
33
+ "Label": ent_label,
34
+ "Sentence Index": i,
35
+ "Sentiment Label": sentiment["label"],
36
+ "Sentiment Score": round(sentiment["score"], 3)
37
+ })
38
+
39
+ df = pd.DataFrame(entity_sentiment_links)
40
+ return df if not df.empty else "Keine Entitäten gefunden."
41
+
42
+ # Gradio Interface
43
+ demo = gr.Interface(
44
+ fn=link_entities_with_sentiment,
45
+ inputs=gr.Textbox(lines=10, label="Gib deinen deutschen Text ein"),
46
+ outputs=gr.Dataframe(label="Entitäten mit Sentiment"),
47
+ title="NER + Sentiment Analyse (Deutsch)",
48
+ description="Diese Demo verknüpft erkannte Entitäten mit Sentiment-Labels aus dem gleichen Satz.",
49
+ allow_flagging="manual",
50
+ )
51
+
52
+ if __name__ == "__main__":
53
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ de_core_news_sm @ https://github.com/explosion/spacy-models/releases/download/de_core_news_sm-3.8.0/de_core_news_sm-3.8.0-py3-none-any.whl
3
+ gradio==5.49.1
4
+ hf_transfer==0.1.9
5
+ pandas==2.3.2
6
+ spacy==3.8.7
7
+ torch==2.8.0
8
+ transformers==4.56.1
start_app.sh ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+
3
+ # Startskript local
4
+
5
+ # Virtuelle Umgebung erstellen
6
+ python3 -m venv .venv
7
+ source .venv/bin/activate
8
+
9
+ # Abhängigkeiten installieren
10
+ pip install --upgrade pip
11
+ pip install -r requirements.txt
12
+
13
+ # App starten
14
+ python app.py