agree / intent_parser.py
dinesh231999's picture
Create intent_parser.py
b68fd85 verified
Raw
History Blame Contribute Delete
5.38 kB
"""
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 "மன்னிக்கவும், எனக்கு புரியவில்லை. மீண்டும் சொல்லுங்கள்."