""" Multilingual Translation Service for LexAI ========================================== Quick MVP implementation for hackathon demo Supports translation between English and Indian regional languages """ from typing import Dict, Any, Optional from googletrans import Translator import re class MultilingualService: """ Translate legal content between English and regional languages """ # Language codes LANGUAGES = { 'en': 'English', 'hi': 'Hindi', 'ta': 'Tamil', 'te': 'Telugu', 'bn': 'Bengali', 'mr': 'Marathi', 'gu': 'Gujarati', 'kn': 'Kannada', 'ml': 'Malayalam', } def __init__(self): self.translator = Translator() def detect_language(self, text: str) -> str: """Auto-detect language of input text""" try: detected = self.translator.detect(text) return detected.lang except: return 'en' def translate_query(self, text: str, source_lang: str = 'auto', target_lang: str = 'en') -> Dict[str, Any]: """ Translate user query to English for processing Args: text: User query in regional language source_lang: Source language code (auto-detect if 'auto') target_lang: Target language (default: English) Returns: Dict with translated text and metadata """ try: # Auto-detect if needed if source_lang == 'auto': source_lang = self.detect_language(text) # Translate result = self.translator.translate(text, src=source_lang, dest=target_lang) return { "original_text": text, "translated_text": result.text, "source_language": source_lang, "source_language_name": self.LANGUAGES.get(source_lang, "Unknown"), "target_language": target_lang, "confidence": 0.95 # Mock confidence for demo } except Exception as e: return { "error": str(e), "original_text": text, "translated_text": text, # Fallback to original "source_language": source_lang, "target_language": target_lang } def translate_response(self, text: str, target_lang: str = 'hi') -> Dict[str, Any]: """ Translate AI response to user's preferred language Args: text: AI response in English target_lang: User's preferred language Returns: Dict with translated response """ try: result = self.translator.translate(text, src='en', dest=target_lang) return { "original_text": text, "translated_text": result.text, "target_language": target_lang, "target_language_name": self.LANGUAGES.get(target_lang, "Unknown"), } except Exception as e: return { "error": str(e), "original_text": text, "translated_text": text, "target_language": target_lang } def translate_legal_document(self, text: str, target_lang: str) -> str: """Translate legal document preserving structure""" try: result = self.translator.translate(text, src='en', dest=target_lang) return result.text except: return text def get_supported_languages(self) -> Dict[str, str]: """Return list of supported languages""" return self.LANGUAGES def simplify_legal_text(self, legal_text: str, reading_level: str = 'simple') -> Dict[str, Any]: """ Convert complex legal language to plain language Args: legal_text: Complex legal text reading_level: 'simple' or 'intermediate' Returns: Simplified text with explanations """ # Legal term mappings (MVP - can be expanded) legal_simplifications = { r'\binter alia\b': 'among other things', r'\bres ipsa loquitur\b': 'the thing speaks for itself', r'\bper se\b': 'by itself', r'\bpro bono\b': 'for free', r'\bhabeas corpus\b': 'produce the person (bring before court)', r'\bbail\b': 'temporary release from custody', r'\bFIR\b': 'First Information Report (initial police complaint)', r'\bIPC\b': 'Indian Penal Code (criminal law)', r'\bCrPC\b': 'Criminal Procedure Code (how criminal cases work)', r'\bappellant\b': 'person appealing the decision', r'\brespondent\b': 'person responding to appeal', r'\bpetitioner\b': 'person filing the case', r'\bdefendant\b': 'person accused/sued', r'\bplaintiff\b': 'person filing complaint', r'\bbeyond reasonable doubt\b': 'very certain, no significant doubts', r'\bprecedent\b': 'previous similar case decision', r'\bjurisdiction\b': 'legal authority/area of court', r'\bconviction\b': 'found guilty', r'\bacquittal\b': 'found not guilty', } simplified = legal_text # Apply simplifications for pattern, replacement in legal_simplifications.items(): simplified = re.sub(pattern, replacement, simplified, flags=re.IGNORECASE) # Extract key points (simple sentence extraction) sentences = simplified.split('.') key_points = [s.strip() + '.' for s in sentences if len(s.strip()) > 20][:5] return { "original_text": legal_text, "simplified_text": simplified, "reading_level": reading_level, "key_points": key_points, "legal_terms_explained": list(legal_simplifications.values())[:10], "summary": f"This text explains legal matters in simpler terms. {len(key_points)} key points identified." } # Global instance _translation_service = None def get_translation_service() -> MultilingualService: """Get or create translation service instance""" global _translation_service if _translation_service is None: _translation_service = MultilingualService() return _translation_service # Quick test if __name__ == "__main__": service = MultilingualService() # Test translation print("Testing translation...") result = service.translate_query("मुझे जमानत कैसे मिलेगी?", source_lang='hi', target_lang='en') print(f"Hindi → English: {result['translated_text']}") # Test simplification print("\nTesting simplification...") legal_text = "The appellant filed a habeas corpus petition seeking bail under Section 302 IPC. The FIR was lodged inter alia alleging murder beyond reasonable doubt." simplified = service.simplify_legal_text(legal_text) print(f"Original: {legal_text}") print(f"Simplified: {simplified['simplified_text']}") print(f"Key points: {simplified['key_points']}")