|
@@ -304,8 +304,54 @@ class NLPClassifierPlugin(TrixyPlugin):
|
|
|
pdebug(f"[Classifier] Slots via generischem Match ({kw_result.intent}): {kw_result.slots}")
|
|
pdebug(f"[Classifier] Slots via generischem Match ({kw_result.intent}): {kw_result.slots}")
|
|
|
return kw_result.slots
|
|
return kw_result.slots
|
|
|
|
|
|
|
|
|
|
+ # Strategie 3: Heuristik — Stoppwoerter entfernen, Rest als Query
|
|
|
|
|
+ # Fuer Intents mit freiem {query} Slot (play_music, search_notes, etc.)
|
|
|
|
|
+ query_intents = {
|
|
|
|
|
+ "play_music", "search_notes", "search_appointment",
|
|
|
|
|
+ }
|
|
|
|
|
+ if intent_name in query_intents:
|
|
|
|
|
+ query = self._extract_query_heuristic(text)
|
|
|
|
|
+ if query:
|
|
|
|
|
+ pdebug(f"[Classifier] Query via Heuristik: '{query}'")
|
|
|
|
|
+ return {"query": query}
|
|
|
|
|
+
|
|
|
return {}
|
|
return {}
|
|
|
|
|
|
|
|
|
|
+ @staticmethod
|
|
|
|
|
+ def _extract_query_heuristic(text: str) -> str:
|
|
|
|
|
+ """
|
|
|
|
|
+ Extrahiert einen Query aus dem Text durch Entfernen von Stoppwoertern.
|
|
|
|
|
+
|
|
|
|
|
+ "koenntest du bitte musik von rammstein spielen"
|
|
|
|
|
+ → entferne: koenntest, du, bitte, musik, von, spielen
|
|
|
|
|
+ → uebrig: "rammstein"
|
|
|
|
|
+ """
|
|
|
|
|
+ stop_words = {
|
|
|
|
|
+ # Hoeflichkeit
|
|
|
|
|
+ "koenntest", "kannst", "wuerdest", "waerst", "bitte", "mal",
|
|
|
|
|
+ "du", "mir", "doch", "gerne", "gern",
|
|
|
|
|
+ # Musik-spezifisch
|
|
|
|
|
+ "musik", "spiel", "spiele", "spielen", "abspielen", "abspiel",
|
|
|
|
|
+ "mach", "mache", "hoeren", "hoer", "an", "von", "etwas",
|
|
|
|
|
+ "lied", "song", "track",
|
|
|
|
|
+ # Allgemein
|
|
|
|
|
+ "ich", "moechte", "will", "haette", "lass", "wir",
|
|
|
|
|
+ "den", "die", "das", "der", "dem", "ein", "eine", "einen",
|
|
|
|
|
+ "und", "oder", "fuer", "mit", "auf", "in", "im",
|
|
|
|
|
+ "sei", "so", "lieb", "nett", "es",
|
|
|
|
|
+ # Suche
|
|
|
|
|
+ "suche", "such", "suchen", "finde", "finden", "nach",
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ words = text.lower().split()
|
|
|
|
|
+ # Stoppwoerter entfernen
|
|
|
|
|
+ query_words = [w for w in words if w not in stop_words]
|
|
|
|
|
+
|
|
|
|
|
+ # Satzzeichen entfernen
|
|
|
|
|
+ query = " ".join(query_words).strip("?!.,")
|
|
|
|
|
+
|
|
|
|
|
+ return query if query else ""
|
|
|
|
|
+
|
|
|
def _get_session_info(self, satellite_id: str) -> dict[str, Any]:
|
|
def _get_session_info(self, satellite_id: str) -> dict[str, Any]:
|
|
|
"""Holt Session-Info fuer den Satellite."""
|
|
"""Holt Session-Info fuer den Satellite."""
|
|
|
try:
|
|
try:
|