| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- # -*- 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
|