# ARSXAI10 - Algorithmic Recursive Sequence Analysis mit Explainable AI

[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![XAI](https://img.shields.io/badge/XAI-Depth--Bounded_PCFG-green.svg)](https://en.wikipedia.org/wiki/Explainable_artificial_intelligence)
[![Version](https://img.shields.io/badge/version-10.0-red.svg)](.)

---

## 📖 Inhaltsverzeichnis

1. [Einführung und Vision](#-einführung-und-vision)
2. [Hauptmerkmale](#-hauptmerkmale)
3. [Neu in Version 10.0](#-neu-in-version-100)
4. [Installation](#-installation)
5. [Die zentrale Idee: Depth-Bounded PCFG](#-die-zentrale-idee-depth-bounded-pcfg)
6. [Integrierte Modelle](#-integrierte-modelle)
7. [Neue Verfahren im Detail](#-neue-verfahren-im-detail)
8. [Dateiformate](#-dateiformate)
9. [Benutzeroberfläche](#-benutzeroberfläche)
10. [Bedienungsanleitung](#-bedienungsanleitung)
11. [XAI-Erklärungen verstehen](#-xai-erklärungen-verstehen)
12. [Erweiterte Induktion](#-erweiterte-induktion)
13. [Beispiele](#-beispiele)
14. [Exportformate](#-exportformate)
15. [Fehlerbehebung](#-fehlerbehebung)
16. [Mitwirken](#-mitwirken)
17. [Lizenz](#-lizenz)

---

## 🎯 Einführung und Vision

**ARSXAI10** ist die evolutionäre Weiterentwicklung von ARSXAI9 und eine universelle Analyseplattform für sequenzielle Daten mit Fokus auf **Explainable AI (XAI)**. Die Kernidee bleibt: Wiederkehrende Muster in Sequenzen werden zu Nonterminalen abstrahiert und bilden die Grundlage für natürliche Erklärungen.

### Die zentrale Erkenntnis von Version 10
Nicht alle Muster sind gleich wichtig - und nicht alle sollten unbegrenzt tief geschachtelt werden. ARSXAI10 führt **Tiefenbeschränkung** und **MDL-Optimierung** ein, um die Interpretierbarkeit zu maximieren und Overfitting zu vermeiden.

### Hauptanwendungsgebiete

| Bereich | Anwendung |
|---------|-----------|
| **Dialoganalyse** | Verkaufsgespräche, Beratungen, Therapiegespräche |
| **Prozessanalyse** | Workflow-Muster, Produktionsabläufe |
| **Verhaltensanalyse** | Aktionssequenzen, Interaktionsmuster |
| **Code-Analyse** | Programmabläufe, API-Aufrufsequenzen |
| **Wissenschaft** | Sequenzmuster in beliebigen Domänen |

---

## 🌟 Hauptmerkmale

### 🧠 **Depth-Bounded PCFG**
- Beschränkung der Hierarchietiefe (einstellbar 1-10)
- Verhindert Überanpassung an seltene Muster
- Kognitiv plausibel (beschränktes Arbeitsgedächtnis)

### 📊 **MDL-Optimierung (Minimum Description Length)**
- Kompression als Gütekriterium für Grammatiken
- Automatische Erkennung des optimalen Iterationsstopps
- Vergleich verschiedener Grammatiken nach Kompressionsrate

### 🔍 **SemInfo-Maximierung** (optional)
- Semantische Namen für Nonterminale mit Sentence-Transformers
- Kohärenzmessung für erkannte Muster
- Beispiel: `KOHÄRENT_2` statt `P_CBG_BBG_2`

### ⚡ **PrefixSpan für große Daten** (optional)
- Effiziente Mustersuche bei >1000 Ketten
- On-demand Installation über GUI
- Skaliert auf große Korpora

### 💬 **Natürlichsprachliche Erklärungen** (verbessert)
```text
🔍 Erklärung für Symbol 'CBBd':
============================================================
🔤 CBBd ist ein grundlegendes Symbol.

📊 Es kommt in folgenden wiederkehrenden Mustern vor:
  • P_CBBd_BBBd_2_d1 (Tiefe 1, 88% der Ketten):
    Position: nach nichts, vor BBBd

🏗️ Hierarchische Einbettung (max. Tiefe 5):
└─ in P_CBBd_BBBd_2_d1 (Tiefe 1)
  └─ in P_Doppel_4_d2 (Tiefe 2)
    └─ in P_GESAMT_10_d3 (Tiefe 3)

✅ Konfidenz: 95%
```

---

## ✨ Neu in Version 10.0

### ❌ **Optimiert**
- Die alte `GrammarInducer`-Klasse bleibt als Fallback erhalten
- Alle XAI-Erklärungen zeigen jetzt Tiefeninformationen
- Exportformate enthalten Tiefenstatistik

### ✅ **Hinzugefügt**
- **`DepthBoundedGrammarInducer`** - Tiefenbeschränkte Grammatikinduktion
- **`MDLOptimizer`** - Minimum Description Length Optimierung
- **`SemInfoMaximizer`** - Semantische Namen (optional)
- **Neuer GUI-Tab** "Erweiterte Induktion"
- **PrefixSpan-Integration** für große Daten
- **Tiefenstatistik** mit Verteilungsanalyse
- **Vergleichsfunktion** Depth-Bounded vs. Standard

### 🎯 **XAI-Verbesserungen**
- Erklärungen zeigen jetzt **Tiefe** jedes Nonterminals
- **Übersprungene Muster** werden dokumentiert
- **MDL-Scores** als Qualitätsmaß
- **Semantische Namen** wenn verfügbar

---

## 💻 Installation

### Systemvoraussetzungen

- **Python**: 3.8 oder höher
- **RAM**: 4 GB (empfohlen, 8 GB für SemInfo)
- **Festplatte**: 1 GB für Abhängigkeiten
- **OS**: Windows, macOS, Linux

### Automatische Installation

```bash
# Repository klonen
git clone https://github.com/yourusername/ARSXAI10.git
cd ARSXAI10

# ARSXAI9.py muss im gleichen Verzeichnis sein!
# Programm starten (Pakete werden automatisch installiert)
python ARSXAI10.py
```

### Wichtiger Hinweis
ARSXAI10.py **importiert ARSXAI9.py** und erweitert es. Stellen Sie sicher, dass beide Dateien im gleichen Verzeichnis liegen!

### Optionale Pakete

| Paket | Funktion | Installation |
|-------|----------|--------------|
| **prefixspan** | Effiziente Mustersuche für >1000 Ketten | `pip install prefixspan` |
| **sentence-transformers** | Semantische Namen | `pip install sentence-transformers` |

Beide können auch **während der Laufzeit** über den "Erweiterte Induktion"-Tab installiert werden.

---

## 🧠 Die zentrale Idee: Depth-Bounded PCFG

### 1. **Das Problem unbegrenzter Tiefe**

In ARSXAI9 konnte die Hierarchie theoretisch unbegrenzt wachsen:
```
P_CBG_BBG_2 → CBG, BBG
P_Doppel_4 → P_CBBd_BBBd_2, P_CBBd_BBBd_2
P_GESAMT_10 → P_CBG_BBG_2, P_Doppel_4, ...
P_SUPER_20 → P_GESAMT_10, P_GESAMT_10, ...
```

**Probleme:**
- Schwer interpretierbar (was bedeutet Tiefe 7?)
- Overfitting auf seltene Muster
- Kognitiv nicht plausibel (Menschen denken in begrenzten Hierarchien)

### 2. **Die Lösung: Tiefenbeschränkung**

ARSXAI10 führt eine **maximale Tiefe** ein (einstellbar 1-10):

```python
# Tiefe 1 (max_depth=1)
P_CBG_BBG_2_d1 → CBG, BBG
P_CBBd_BBBd_2_d1 → CBBd, BBBd

# Tiefe 2 (max_depth=2) - erlaubt, wenn max_depth=2
P_Doppel_4_d2 → P_CBBd_BBBd_2_d1, P_CBBd_BBBd_2_d1

# Tiefe 3 (max_depth=3) - erlaubt, wenn max_depth=3
P_GESAMT_10_d3 → P_CBG_BBG_2_d1, P_Doppel_4_d2, ...
```

### 3. **MDL-Optimierung: Wann stoppen?**

Das MDL-Prinzip (Minimum Description Length) besagt: Die beste Grammatik ist die, die die Daten am stärksten komprimiert.

```python
# Kompressionsgewinn pro Iteration
Iteration 1: 50% Kompression
Iteration 2: 30% Kompression (zusätzlich)
Iteration 3: 10% Kompression  
Iteration 4: 2% Kompression   ← Stopp hier (Elbow)
```

Der **optimale Stopppunkt** wird automatisch erkannt.

---

## 📦 Integrierte Modelle

| Modell | Klasse | Beschreibung | Status |
|--------|--------|--------------|--------|
| **Depth-Bounded PCFG** | `DepthBoundedGrammarInducer` | Tiefenbeschränkte Grammatik | ⭐ Hauptmodell (neu) |
| **ARS 3.0** | `GrammarInducer` | Hierarchische PCFG (unbegrenzt) | 🔧 Fallback |
| **ARS 2.0** | `ARS20` | Einfache Bigramm-Wahrscheinlichkeiten | 🔧 Optional |
| **HMM** | `ARSHiddenMarkovModel` | Latente Phasen | 🔧 Optional |
| **CRF** | `ARSCRFModel` | Kontext-sensitive Features | 🔧 Optional |
| **Petri-Netz** | `ARSPetriNet` | Ressourcen-basierte Modellierung | 🔧 Optional |
| **Generator** | `ChainGenerator` | Synthetische Ketten | 🔧 Optional |

---

## 🔬 Neue Verfahren im Detail

### 1. **Depth-BoundedGrammarInducer**

```python
class DepthBoundedGrammarInducer(GrammarInducer):
    """
    Parameter:
        max_depth=5: Maximale Hierarchietiefe
        use_mdl=True: MDL-Optimierung aktivieren
        use_prefixspan=False: PrefixSpan für große Daten
        use_seminfo=False: Semantische Namen (benötigt sentence-transformers)
    """
    
    # Neue Methoden:
    - get_depth_statistics()  # Tiefenverteilung anzeigen
    - get_mdl_statistics()    # MDL-Kompressionsstatistik
    - compare_with_standard() # Vergleich mit Standard-Grammatik
```

### 2. **MDL-Optimizer**

```python
mdl = MDLOptimizer()

# Kompressionsrate berechnen
ratio = mdl.calculate_compression_ratio(chains, grammar)

# Zwei Grammatiken vergleichen
comparison = mdl.compare_grammars(grammar1, grammar2, chains)

# Optimalen Stopppunkt finden
cutoff = mdl.optimal_cutoff(compression_gains)
```

### 3. **SemInfo-Maximizer**

```python
seminfo = SemInfoMaximizer()

# Semantische Kohärenz einer Sequenz
coherence = seminfo.semantic_coherence(["CBG", "BBG", "CBBd"])

# Semantischen Namen vorschlagen
name = seminfo.suggest_name(["CBG", "BBG"])  # → "KOHÄRENT_2"
```

---

## 📁 Dateiformate

### Eingabeformat (wie in ARSXAI9)

```txt
# Kommentare beginnen mit #
# Trennzeichen: Komma, Semikolon oder Leerzeichen

# Transkript 1
CBG, BBG, CBBd, BBBd, CBA, BBA, CBBd, BBBd, CBA, BAA, CAA, BAB, CAB

# Transkript 2  
CBG, BBG, CBBd, BBBd, CBBd, BBBd, CBA, BBA, BAA, CAA, BAB, CAB
```

### Tiefeninformation im Export

```json
{
  "grammar": {
    "patterns": [...],
    "depth_statistics": {
      "max_depth": 5,
      "depth_distribution": {"1": 12, "2": 5, "3": 2}
    }
  }
}
```

---

## 🖥️ Benutzeroberfläche

### Neuer Tab: "Erweiterte Induktion"

```
┌─────────────────────────────────────────────────────────────────┐
│ ARSXAI10 - Depth-Bounded PCFG mit XAI                                │
├──────────────────────┬──────────────────────────────────────────┤
│ EINGABE              │ AUSGABE (Notebook-Tabs)                  │
│                      │ ┌─────────────────────────────────────┐ │
│ Trennzeichen: [Komma]│ │ Grammatik | Muster | XAI | Modelle  │ │
│                      │ │ Erweiterte Induktion [NEU]          │ │
├──────────────────────┴──────────────────────────────────────────┤
│                                                                  │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ▤ ERWEITERTE INDUKTION                                       │ │
│ │                                                              │ │
│ │ [Param