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/orthography_tool.py
# tools/orthography_tool.py
import os
from pathlib import Path
from typing import Dict, List, Optional, Any
from tools.readability_tool import calculate_readability_score as _readability_score

# Pfade zu den Orthographie-Wissensdateien
ORTHOGRAPHY_BASE_PATH = Path(__file__).parent.parent / "knowledge" / "orthography"
GETRENNT_ZUSAMMEN_PATH = ORTHOGRAPHY_BASE_PATH / "getrennt_zusammenschreibung.txt"
BINDESTRICH_PATH = ORTHOGRAPHY_BASE_PATH / "bindestrich.txt"
GROSS_KLEIN_PATH = ORTHOGRAPHY_BASE_PATH / "gross_kleinschreibung.txt"
ZEICHENSETZUNG_PATH = ORTHOGRAPHY_BASE_PATH / "zeichensetzung.txt"
WORTTRENNUNG_PATH = ORTHOGRAPHY_BASE_PATH / "worttrennung.txt"

# Cache für die geladenen Daten
orthography_data = {
    "getrennt_zusammen": [],
    "bindestrich": [],
    "gross_klein": [],
    "zeichensetzung": [],
    "worttrennung": [],
}

def load_orthography_file(file_path: Path, data_key: str) -> bool:
    """
    Lädt Orthographie-Daten aus einer TXT-Datei.
    
    Args:
        file_path: Pfad zur Datei
        data_key: Schlüssel für das orthography_data Dictionary
    
    Returns:
        bool: True, wenn das Laden erfolgreich war, sonst False
    """
    if not file_path.is_file():
        print(f"Info: Orthographie-Datei noch nicht vorhanden oder leer: {file_path}")
        return False
    
    try:
        with open(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(f"Info: Orthographie-Datei {file_path.name} ist leer. Bereit zum Befüllen durch Benutzer.")
                return False
            
            # Speichere den gesamten Inhalt als Liste von Zeilen
            orthography_data[data_key] = [line.strip() for line in content.split('\n') 
                                         if line.strip() and not line.strip().startswith('#')]
            
            print(f"Orthographie-Daten für {data_key} erfolgreich geladen: {len(orthography_data[data_key])} Regeln/Einträge.")
            return True
    
    except Exception as e:
        print(f"Fehler beim Laden der Orthographie-Datei {file_path}: {e}")
        return False

def load_all_orthography_data() -> Dict[str, bool]:
    """
    Lädt alle Orthographie-Datendateien.
    
    Returns:
        Dict[str, bool]: Dictionary mit Status für jede Datei
    """
    load_status = {}
    
    load_status["getrennt_zusammen"] = load_orthography_file(GETRENNT_ZUSAMMEN_PATH, "getrennt_zusammen")
    load_status["bindestrich"] = load_orthography_file(BINDESTRICH_PATH, "bindestrich")
    load_status["gross_klein"] = load_orthography_file(GROSS_KLEIN_PATH, "gross_klein")
    load_status["zeichensetzung"] = load_orthography_file(ZEICHENSETZUNG_PATH, "zeichensetzung")
    load_status["worttrennung"] = load_orthography_file(WORTTRENNUNG_PATH, "worttrennung")
    
    return load_status

# Beim Import des Moduls alle Daten laden
load_status = load_all_orthography_data()

def reload_orthography_data() -> Dict[str, bool]:
    """
    Lädt alle Orthographie-Daten neu (für den Fall, dass die Dateien aktualisiert wurden).
    
    Returns:
        Dict[str, bool]: Status des Ladens für jede Datei
    """
    global load_status
    load_status = load_all_orthography_data()
    return load_status

def get_getrennt_zusammen_rules() -> List[str]:
    """
    Gibt alle Regeln zur Getrennt- und Zusammenschreibung zurück.
    
    Returns:
        List[str]: Liste von Regeln oder leere Liste, wenn keine Daten verfügbar
    """
    return orthography_data["getrennt_zusammen"]

def get_bindestrich_rules() -> List[str]:
    """
    Gibt alle Regeln zur Schreibung mit Bindestrich zurück.
    
    Returns:
        List[str]: Liste von Regeln oder leere Liste, wenn keine Daten verfügbar
    """
    return orthography_data["bindestrich"]

def get_gross_klein_rules() -> List[str]:
    """
    Gibt alle Regeln zur Groß- und Kleinschreibung zurück.
    
    Returns:
        List[str]: Liste von Regeln oder leere Liste, wenn keine Daten verfügbar
    """
    return orthography_data["gross_klein"]

def get_zeichensetzung_rules() -> List[str]:
    """
    Gibt alle Regeln zur Zeichensetzung zurück.
    
    Returns:
        List[str]: Liste von Regeln oder leere Liste, wenn keine Daten verfügbar
    """
    return orthography_data["zeichensetzung"]

def get_worttrennung_rules() -> List[str]:
    """
    Gibt alle Regeln zur Worttrennung am Zeilenende zurück.
    
    Returns:
        List[str]: Liste von Regeln oder leere Liste, wenn keine Daten verfügbar
    """
    return orthography_data["worttrennung"]

def check_getrennt_zusammen(text: str) -> Dict:
    """
    Überprüft einen Text auf potenzielle Probleme mit Getrennt- und Zusammenschreibung.
    
    Args:
        text (str): Der zu analysierende Text
    
    Returns:
        Dict: Ergebnis der Analyse
    """
    if not load_status["getrennt_zusammen"]:
        return {
            "status": "Keine Daten verfügbar",
            "message": "Keine Regeln zur Getrennt- und Zusammenschreibung verfügbar. Bitte befüllen Sie die Datei."
        }
    
    # Implementierung der Logik zur Überprüfung
    # Diese einfache Version gibt nur zurück, dass die Analyse durchgeführt wurde
    return {
        "status": "Analyse durchgeführt",
        "rules_count": len(orthography_data["getrennt_zusammen"]),
        "message": "Die Analyse wurde mit den verfügbaren Regeln durchgeführt."
    }

def check_bindestrich(text: str) -> Dict:
    """
    Überprüft einen Text auf potenzielle Probleme mit Bindestrich-Schreibung.
    
    Args:
        text (str): Der zu analysierende Text
    
    Returns:
        Dict: Ergebnis der Analyse
    """
    if not load_status["bindestrich"]:
        return {
            "status": "Keine Daten verfügbar",
            "message": "Keine Regeln zur Bindestrich-Schreibung verfügbar. Bitte befüllen Sie die Datei."
        }
    
    # Implementierung der Logik zur Überprüfung
    # Diese einfache Version gibt nur zurück, dass die Analyse durchgeführt wurde
    return {
        "status": "Analyse durchgeführt",
        "rules_count": len(orthography_data["bindestrich"]),
        "message": "Die Analyse wurde mit den verfügbaren Regeln durchgeführt."
    }

def check_gross_klein(text: str) -> Dict:
    """
    Überprüft einen Text auf potenzielle Probleme mit Groß- und Kleinschreibung.
    
    Args:
        text (str): Der zu analysierende Text
    
    Returns:
        Dict: Ergebnis der Analyse
    """
    if not load_status["gross_klein"]:
        return {
            "status": "Keine Daten verfügbar",
            "message": "Keine Regeln zur Groß- und Kleinschreibung verfügbar. Bitte befüllen Sie die Datei."
        }
    
    # Implementierung der Logik zur Überprüfung
    # Diese einfache Version gibt nur zurück, dass die Analyse durchgeführt wurde
    return {
        "status": "Analyse durchgeführt",
        "rules_count": len(orthography_data["gross_klein"]),
        "message": "Die Analyse wurde mit den verfügbaren Regeln durchgeführt."
    }

def check_zeichensetzung(text: str) -> Dict:
    """
    Überprüft einen Text auf potenzielle Probleme mit Zeichensetzung.
    
    Args:
        text (str): Der zu analysierende Text
    
    Returns:
        Dict: Ergebnis der Analyse
    """
    if not load_status["zeichensetzung"]:
        return {
            "status": "Keine Daten verfügbar",
            "message": "Keine Regeln zur Zeichensetzung verfügbar. Bitte befüllen Sie die Datei."
        }
    
    # Implementierung der Logik zur Überprüfung
    # Diese einfache Version gibt nur zurück, dass die Analyse durchgeführt wurde
    return {
        "status": "Analyse durchgeführt",
        "rules_count": len(orthography_data["zeichensetzung"]),
        "message": "Die Analyse wurde mit den verfügbaren Regeln durchgeführt."
    }

def check_worttrennung(text: str) -> Dict:
    """
    Überprüft einen Text auf potenzielle Probleme mit Worttrennung am Zeilenende.
    
    Args:
        text (str): Der zu analysierende Text
    
    Returns:
        Dict: Ergebnis der Analyse
    """
    if not load_status["worttrennung"]:
        return {
            "status": "Keine Daten verfügbar",
            "message": "Keine Regeln zur Worttrennung verfügbar. Bitte befüllen Sie die Datei."
        }
    
    # Implementierung der Logik zur Überprüfung
    # Diese einfache Version gibt nur zurück, dass die Analyse durchgeführt wurde
    return {
        "status": "Analyse durchgeführt",
        "rules_count": len(orthography_data["worttrennung"]),
        "message": "Die Analyse wurde mit den verfügbaren Regeln durchgeführt."
    }

def get_all_orthography_rules() -> Dict:
    """
    Gibt alle verfügbaren Orthographie-Regeln zurück.
    
    Returns:
        Dict: Dictionary mit allen Regeln, kategorisiert
    """
    return {
        "getrennt_zusammen": orthography_data["getrennt_zusammen"],
        "bindestrich": orthography_data["bindestrich"],
        "gross_klein": orthography_data["gross_klein"],
        "zeichensetzung": orthography_data["zeichensetzung"],
        "worttrennung": orthography_data["worttrennung"],
        "load_status": load_status
    } 

# Lesbarkeitsbewertung: Delegiert an tools.readability_tool.calculate_readability_score
def calculate_readability_score(text: str) -> Dict[str, Any]:
    """
    Delegiert an tools.readability_tool.calculate_readability_score.
    """
    return _readability_score(text)