Spaces:
Running
Running
| 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 "" |