# -*- coding: utf-8 -*- """ LanguageTool-Korrekturschicht. Volle Grammatik-Korrektur ueber lokalen JVM-Server (~30ms/Satz). Maechtiges Fallback fuer komplexe Fehler. """ from trixy_core.stt.layers.base import CorrectionLayer from trixy_core.utils.debug import pdebug, pwarn try: import language_tool_python _HAS_LANGUAGETOOL = True except ImportError: _HAS_LANGUAGETOOL = False class LanguageToolLayer(CorrectionLayer): """LanguageTool Grammatik-Korrektur.""" NAME = "languagetool" def __init__(self) -> None: self._tool: "language_tool_python.LanguageTool | None" = None def is_available(self) -> bool: """Prueft ob language_tool_python installiert ist.""" return _HAS_LANGUAGETOOL def initialize(self, config: dict, language: str, protected_words: list[str]) -> bool: """Startet lokalen LanguageTool-Server.""" if not _HAS_LANGUAGETOOL: return False lt_language = config.get("languagetool_language", f"{language}-DE") try: self._tool = language_tool_python.LanguageTool(lt_language) pdebug(f"[LanguageTool] Server gestartet fuer '{lt_language}'") return True except Exception as e: pwarn(f"[LanguageTool] Initialisierung fehlgeschlagen: {e}") self._tool = None return False def correct(self, text: str) -> str: """Korrigiert Text mit LanguageTool (volle Grammatik-Pruefung).""" if not self._tool or not text.strip(): return text try: corrected = self._tool.correct(text) if corrected != text: pdebug(f"[LanguageTool] '{text}' → '{corrected}'") return corrected return text except Exception as e: pdebug(f"[LanguageTool] Fehler bei Korrektur: {e}") return text def shutdown(self) -> None: """Stoppt den LanguageTool-Server.""" if self._tool: try: self._tool.close() except Exception: pass self._tool = None