Spaces:
Running
Running
File size: 6,311 Bytes
e50d7ee | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | 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 "" |