coco-guide-api / intents.py
Abhiru1's picture
Upload intents.py
e50d7ee verified
import re
import unicodedata
SI_GREET = ["ආයුබෝවන්", "හෙලෝ", "හලෝ", "හායි", "සුභ උදෑසනක්", "සුභ සන්ධ්‍යාවක්"]
TA_GREET = ["வணக்கம்", "ஹலோ", "ஹாய்", "காலை வணக்கம்", "மாலை வணக்கம்"]
SI_THANKS = ["ස්තුතියි", "බොහොම ස්තුතියි", "තෑන්ක්ස්"]
TA_THANKS = ["நன்றி", "மிக்க நன்றி", "தாங்க்ஸ்"]
SI_HOW_ARE_YOU = [
"කොහොමද",
"ඔබ කොහොමද",
"ඔයා හොඳින්ද",
"ඔබ හොඳින්ද",
]
TA_HOW_ARE_YOU = [
"நீங்கள் எப்படி இருக்கிறீர்கள்",
"நீ எப்படி இருக்கிறாய்",
"நலமா",
"சௌக்கியமா",
]
SI_WHO_ARE_YOU = [
"ඔයා කවුද",
"ඔබ කවුද",
]
TA_WHO_ARE_YOU = [
"நீங்கள் யார்",
"நீ யார்",
]
SI_WHAT_CAN_YOU_DO = [
"ඔයාට මොනවා කරන්න පුළුවන්",
"ඔබට මොනවා කරන්න පුළුවන්",
"ඔයා මොකක්ද කරන්නෙ",
"ඔබට මොකක්ද කරන්න පුළුවන්",
]
TA_WHAT_CAN_YOU_DO = [
"நீங்கள் என்ன செய்ய முடியும்",
"நீ என்ன செய்ய முடியும்",
"உங்களுக்கு என்ன செய்ய முடியும்",
]
EN_GREET = {"hi", "hello"}
EN_THANKS = {"thanks", "thank you"}
EN_HOW_ARE_YOU = {"how are you"}
def _norm(text: str) -> str:
text = unicodedata.normalize("NFC", str(text))
text = re.sub(r"\s+", " ", text).strip()
text = text.strip(" ,.!?;:-")
return text
def _is_only_smalltalk(t: str, phrases: list[str]) -> bool:
for p in phrases:
p_norm = _norm(p)
if t == p_norm:
return True
if t.startswith(p_norm):
rest = t[len(p_norm):].strip(" ,.!?;:-")
if not rest:
return True
return False
def _matches_any_normalized(t: str, phrases: list[str]) -> bool:
normalized_phrases = {_norm(p) for p in phrases}
return t in normalized_phrases
def detect_smalltalk(text: str, lang: str):
t = _norm(text)
tl = t.lower()
if lang == "si":
if _is_only_smalltalk(t, SI_GREET):
return "greet"
if _is_only_smalltalk(t, SI_THANKS):
return "thanks"
if _matches_any_normalized(t, SI_HOW_ARE_YOU):
return "how_are_you"
if _matches_any_normalized(t, SI_WHO_ARE_YOU):
return "who_are_you"
if _matches_any_normalized(t, SI_WHAT_CAN_YOU_DO):
return "what_can_you_do"
if lang == "ta":
if _is_only_smalltalk(t, TA_GREET):
return "greet"
if _is_only_smalltalk(t, TA_THANKS):
return "thanks"
if _matches_any_normalized(t, TA_HOW_ARE_YOU):
return "how_are_you"
if _matches_any_normalized(t, TA_WHO_ARE_YOU):
return "who_are_you"
if _matches_any_normalized(t, TA_WHAT_CAN_YOU_DO):
return "what_can_you_do"
if tl in EN_GREET:
return "greet"
if tl in EN_THANKS:
return "thanks"
if tl in EN_HOW_ARE_YOU:
return "how_are_you"
return None
def smalltalk_reply(kind: str, lang: str):
if lang == "si":
if kind == "greet":
return "ආයුබෝවන්! ඔබට පොල් වගාව ගැන මොනවාද අහන්න තියෙන්නේ?"
if kind == "thanks":
return "ස්තුතියි! තවත් ප්‍රශ්නයක් තිබ්බොත් අහන්න."
if kind == "how_are_you":
return "මම හොඳින්. ඔබට පොල් වගාව සම්බන්ධ ප්‍රශ්නයක් ඇත්නම් අහන්න."
if kind == "who_are_you":
return "මම පොල් වගාව සම්බන්ධ උපදෙස් ලබාදෙන සහායක පද්ධතියක්."
if kind == "what_can_you_do":
return "මට පොල් වගාව, රෝග, පළිබෝධ, පොහොර සහ වගා කළමනාකරණය සම්බන්ධ උපදෙස් ලබාදිය හැක."
return "කරුණාකර පොල් වගාවට අදාළ ප්‍රශ්නයක් අහන්න."
if lang == "ta":
if kind == "greet":
return "வணக்கம்! தேங்காய் சாகுபடி பற்றி என்ன கேட்க விரும்புகிறீர்கள்?"
if kind == "thanks":
return "நன்றி! இன்னும் கேள்விகள் இருந்தால் கேளுங்கள்."
if kind == "how_are_you":
return "நான் நலமாக இருக்கிறேன். தென்னைச் சாகுபடி தொடர்பான கேள்வி இருந்தால் கேளுங்கள்."
if kind == "who_are_you":
return "நான் தென்னைச் சாகுபடி தொடர்பான ஆலோசனைகளை வழங்கும் உதவி அமைப்பு."
if kind == "what_can_you_do":
return "நான் தென்னைச் சாகுபடி, நோய்கள், பூச்சிகள், உரம் மற்றும் மேலாண்மை தொடர்பான ஆலோசனைகளை வழங்க முடியும்."
return "தயவுசெய்து தென்னைச் சாகுபடி தொடர்பான கேள்வியை கேளுங்கள்."
return ""