HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/textanalyse/tools/phonetics_tool.py
# tools/phonetics_tool.py
import os
from pathlib import Path
from typing import Dict, List, Tuple, Optional

# Dateipfad zur Laut-Buchstaben-Zuordnung
PHONETICS_FILE_PATH = Path(__file__).parent.parent / "knowledge" / "phonetics" / "laut_buchstaben_zuordnung.txt"

# Cache für die geladenen Daten
phonetics_data = {
    "laut_to_buchstaben": {},  # Laut -> mögliche Buchstaben
    "buchstaben_to_laut": {},  # Buchstaben -> mögliche Laute
    "beispiele": {},          # Laut -> Beispiele
    "hinweise": {}            # Laut -> Hinweise
}

def load_phonetics_data() -> bool:
    """
    Lädt die Laut-Buchstaben-Zuordnungen aus der TXT-Datei.
    
    Returns:
        bool: True, wenn das Laden erfolgreich war, sonst False
    """
    if not PHONETICS_FILE_PATH.is_file():
        print(f"Info: Phonetik-Datei noch nicht vorhanden oder leer: {PHONETICS_FILE_PATH}")
        return False
    
    try:
        with open(PHONETICS_FILE_PATH, 'r', encoding='utf-8') as f:
            # Datei ist leer oder hat noch keine Daten - das ist in Ordnung
            content = f.read().strip()
            if not content:
                print("Info: Phonetik-Datei ist leer. Bereit zum Befüllen durch Benutzer.")
                return False
                
            lines = content.split('\n')
            for line in lines:
                # Ignoriere leere Zeilen oder Kommentarzeilen
                if not line.strip() or line.strip().startswith('#'):
                    continue
                
                # Erwarte Format: Laut|Buchstaben|Beispiele|Hinweise
                # Wobei Buchstaben und Beispiele durch Kommas getrennt sein können
                parts = line.split('|')
                if len(parts) < 4:
                    print(f"Warnung: Ungültiges Format in Zeile: {line}")
                    continue
                
                laut = parts[0].strip()
                buchstaben = [b.strip() for b in parts[1].split(',')]
                beispiele = [b.strip() for b in parts[2].split(',')]
                hinweis = parts[3].strip()
                
                # Laut -> Buchstaben Zuordnung
                phonetics_data["laut_to_buchstaben"][laut] = buchstaben
                
                # Beispiele zum Laut
                phonetics_data["beispiele"][laut] = beispiele
                
                # Hinweise zum Laut
                phonetics_data["hinweise"][laut] = hinweis
                
                # Buchstaben -> Laut Zuordnung (umgekehrt)
                for buchstabe in buchstaben:
                    if buchstabe not in phonetics_data["buchstaben_to_laut"]:
                        phonetics_data["buchstaben_to_laut"][buchstabe] = []
                    phonetics_data["buchstaben_to_laut"][buchstabe].append(laut)
        
        print(f"Phonetik-Daten erfolgreich geladen. {len(phonetics_data['laut_to_buchstaben'])} Laute verfügbar.")
        return True
    
    except Exception as e:
        print(f"Fehler beim Laden der Phonetik-Datei: {e}")
        return False

# Beim Import des Moduls die Daten laden
load_success = load_phonetics_data()

def get_buchstaben_for_laut(laut: str) -> List[str]:
    """
    Gibt alle möglichen Buchstaben(kombinationen) für einen Laut zurück.
    
    Args:
        laut (str): Der phonetische Laut (z.B. 'ʃ')
        
    Returns:
        List[str]: Liste von Buchstaben(kombinationen) (z.B. ['sch', 's'])
    """
    if not load_success:
        print("Info: Phonetik-Daten wurden nicht geladen oder sind noch nicht verfügbar.")
        return []
    
    return phonetics_data["laut_to_buchstaben"].get(laut, [])

def get_laute_for_buchstabe(buchstabe: str) -> List[str]:
    """
    Gibt alle möglichen Laute für eine Buchstabe(nkombination) zurück.
    
    Args:
        buchstabe (str): Der Buchstabe oder die Buchstabenkombination (z.B. 'sch')
        
    Returns:
        List[str]: Liste von Lauten (z.B. ['ʃ'])
    """
    if not load_success:
        print("Info: Phonetik-Daten wurden nicht geladen oder sind noch nicht verfügbar.")
        return []
    
    return phonetics_data["buchstaben_to_laut"].get(buchstabe, [])

def get_beispiele_for_laut(laut: str) -> List[str]:
    """
    Gibt Beispielwörter für einen Laut zurück.
    
    Args:
        laut (str): Der phonetische Laut (z.B. 'ʃ')
        
    Returns:
        List[str]: Liste von Beispielwörtern (z.B. ['Schule', 'stehen', 'spät'])
    """
    if not load_success:
        print("Info: Phonetik-Daten wurden nicht geladen oder sind noch nicht verfügbar.")
        return []
    
    return phonetics_data["beispiele"].get(laut, [])

def get_hinweis_for_laut(laut: str) -> str:
    """
    Gibt den Hinweis zu einem Laut zurück.
    
    Args:
        laut (str): Der phonetische Laut (z.B. 'ʃ')
        
    Returns:
        str: Der Hinweis zum Laut (z.B. 'Stimmloser postalveolarer Frikativ')
    """
    if not load_success:
        print("Info: Phonetik-Daten wurden nicht geladen oder sind noch nicht verfügbar.")
        return ""
    
    return phonetics_data["hinweise"].get(laut, "")

def check_phonetics(text: str) -> List[Dict]:
    """
    Analysiert einen Text auf mögliche phonetische Auffälligkeiten.
    Diese Funktion ist für den LautBuchstabenAgent gedacht.
    
    Args:
        text (str): Der zu analysierende Text
        
    Returns:
        List[Dict]: Eine Liste von Wörtern mit Informationen zu ihrer phonetischen Zusammensetzung
    """
    if not load_success:
        print("Info: Phonetik-Daten wurden nicht geladen oder sind noch nicht verfügbar.")
        return [{"info": "Keine Phonetik-Daten verfügbar. Bitte befüllen Sie die Datei laut_buchstaben_zuordnung.txt."}]
    
    # Diese Implementierung ist vereinfacht und fokussiert sich auf 
    # das Rückgabeformat für den Agenten, nicht auf komplexe phonetische Analyse
    
    # Einfaches Wortfilter
    words = [word.strip('.,;:!?()[]{}""\'') for word in text.split() if word.strip('.,;:!?()[]{}""\'')]
    
    results = []
    
    # Für jedes Wort relevante phonetische Informationen sammeln
    for word in words:
        # Hier könnte eine komplexere Analyse stehen
        # Die aktuelle Implementierung ist stark vereinfacht
        
        word_info = {
            "word": word,
            "phonetic_mappings": []
        }
        
        # Vereinfachte Analyse für einige bekannte Buchstabenkombinationen
        for i in range(len(word)):
            # Längere Kombinationen zuerst prüfen
            for length in [4, 3, 2, 1]:
                if i + length <= len(word):
                    buchstabe = word[i:i+length].lower()
                    laute = get_laute_for_buchstabe(buchstabe)
                    
                    if laute:
                        for laut in laute:
                            beispiele = get_beispiele_for_laut(laut)
                            hinweis = get_hinweis_for_laut(laut)
                            
                            word_info["phonetic_mappings"].append({
                                "position": i,
                                "buchstabe": buchstabe,
                                "laut": laut,
                                "beispiele": beispiele,
                                "hinweis": hinweis
                            })
        
        if word_info["phonetic_mappings"]:
            results.append(word_info)
    
    return results

# Hilfsfunktion für LautBuchstabenAgent
def get_all_phonetic_data() -> Dict:
    """
    Gibt alle verfügbaren phonetischen Daten zurück.
    
    Returns:
        Dict: Wörterbuch mit allen Laut-Buchstaben-Zuordnungen
    """
    if not load_success:
        print("Info: Phonetik-Daten wurden nicht geladen oder sind noch nicht verfügbar.")
        return {"info": "Keine Phonetik-Daten verfügbar. Bitte befüllen Sie die Datei laut_buchstaben_zuordnung.txt."}
    
    return {
        "laute": list(phonetics_data["laut_to_buchstaben"].keys()),
        "laut_to_buchstaben": phonetics_data["laut_to_buchstaben"],
        "buchstaben_to_laut": phonetics_data["buchstaben_to_laut"],
        "beispiele": phonetics_data["beispiele"],
        "hinweise": phonetics_data["hinweise"]
    }