Spaces:
Sleeping
Sleeping
File size: 5,381 Bytes
b68fd85 | 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 | """
Offline rule-based Tamil intent matcher — mirrors IntentParser.java from the Android app.
Add more keyword variants as you test with real farmer speech.
"""
INTENT_KEYWORDS = {
"SOIL_MOISTURE_QUERY": ["மண் ஈரப்பதம்", "மண்ணின் ஈரப்பதம்", "நிலத்தில் தண்ணீர்", "மண் எப்படி"],
"TEMPERATURE_QUERY": ["வெப்பநிலை", "சூடு எவ்வளவு", "எவ்வளவு சூடு"],
"HUMIDITY_QUERY": ["காற்றின் ஈரப்பதம்", "ஈரப்பதம் எவ்வளவு"],
"PUMP_ON_COMMAND": ["பம்ப் ஆன்", "மோட்டார் ஆன்", "தண்ணீர் விடு", "பம்ப் இயக்கு"],
"PUMP_OFF_COMMAND": ["பம்ப் ஆஃப்", "மோட்டார் ஆஃப்", "தண்ணீர் நிறுத்து", "பம்ப் நிறுத்து"],
"PUMP_STATUS_QUERY": ["பம்ப் இயங்குகிறதா", "மோட்டார் நிலை", "பம்ப் நிலை"],
"WEATHER_QUERY": ["வானிலை", "மழை பெய்யுமா", "இன்று வானிலை"],
"MARKET_PRICE_QUERY": ["சந்தை விலை", "விலை என்ன", "இன்றைய விலை"],
"DISEASE_DETECTION_REQUEST": ["நோய் பரிசோதனை", "தாவர நோய்", "இலை பார்"],
"CROP_RECOMMENDATION_REQUEST": ["பயிர் பரிந்துரை", "என்ன பயிர் போடலாம்", "எந்த பயிர்"],
"GREETING": ["வணக்கம்", "ஹலோ", "எப்படி இருக்க"],
}
def parse_intent(spoken_text: str) -> str:
"""Returns the matched intent name, or 'UNKNOWN' if nothing matches."""
if not spoken_text or not spoken_text.strip():
return "UNKNOWN"
normalized = spoken_text.strip()
for intent, keywords in INTENT_KEYWORDS.items():
for keyword in keywords:
if keyword in normalized:
return intent
return "UNKNOWN"
def generate_answer(intent: str, sensor_data: dict) -> str:
"""
Generates the Tamil spoken answer for a given intent.
sensor_data is a dict like:
{"soilMoisture": 45.0, "temperature": 29.5, "humidity": 60.0, "pumpStatus": False}
"""
if intent == "SOIL_MOISTURE_QUERY":
val = sensor_data.get("soilMoisture")
if val is None:
return "மன்னிக்கவும், சென்சார் தகவல் இப்போது கிடைக்கவில்லை."
return f"மண் ஈரப்பதம் தற்போது {round(val)} சதவீதம்."
if intent == "TEMPERATURE_QUERY":
val = sensor_data.get("temperature")
if val is None:
return "மன்னிக்கவும், சென்சார் தகவல் இப்போது கிடைக்கவில்லை."
return f"வெப்பநிலை தற்போது {round(val)} டிகிரி செல்சியஸ்."
if intent == "HUMIDITY_QUERY":
val = sensor_data.get("humidity")
if val is None:
return "மன்னிக்கவும், சென்சார் தகவல் இப்போது கிடைக்கவில்லை."
return f"காற்றின் ஈரப்பதம் தற்போது {round(val)} சதவீதம்."
if intent == "PUMP_STATUS_QUERY":
pump_on = sensor_data.get("pumpStatus", False)
return "பம்ப் தற்போது இயங்குகிறது." if pump_on else "பம்ப் தற்போது நிறுத்தப்பட்டுள்ளது."
if intent == "PUMP_ON_COMMAND":
sensor_data["pumpStatus"] = True
return "பம்ப் இயக்கப்படுகிறது."
if intent == "PUMP_OFF_COMMAND":
sensor_data["pumpStatus"] = False
return "பம்ப் நிறுத்தப்படுகிறது."
if intent == "WEATHER_QUERY":
return "வானிலை தகவலை இப்போது பெறுகிறேன். (weather API integration pending)"
if intent == "MARKET_PRICE_QUERY":
return "சந்தை விலை தகவலை இப்போது பெறுகிறேன். (market API integration pending)"
if intent == "DISEASE_DETECTION_REQUEST":
return "தாவர நோய் கண்டறிதலுக்கு புகைப்படம் எடுக்கவும்."
if intent == "CROP_RECOMMENDATION_REQUEST":
return "பயிர் பரிந்துரைக்கு மண் தகவலை உள்ளிடவும்."
if intent == "GREETING":
return "வணக்கம்! நான் உங்கள் விவசாய உதவியாளர். எப்படி உதவ முடியும்?"
return "மன்னிக்கவும், எனக்கு புரியவில்லை. மீண்டும் சொல்லுங்கள்." |