zineb36's picture
Update app.py
3226a2d verified
# CodeAlpha Task 3: Language Detection App - FIXED VERSION
import gradio as gr
from langdetect import detect_langs, DetectorFactory, LangDetectException
# Fix randomness for consistent results
DetectorFactory.seed = 0
# Language codes to full names
LANGUAGES = {
'ar': 'Arabic - العربية', 'en': 'English', 'fr': 'Français', 'es': 'Español',
'de': 'Deutsch', 'it': 'Italiano', 'pt': 'Português', 'ru': 'Русский',
'ja': 'Japanese - 日本語', 'ko': 'Korean - 한국어', 'zh-cn': 'Chinese - 中文',
'hi': 'Hindi - हिन्दी', 'tr': 'Türkçe', 'nl': 'Nederlands', 'pl': 'Polski',
'sv': 'Svenska', 'da': 'Dansk', 'no': 'Norsk', 'fi': 'Suomi', 'so': 'Somali'
}
def detect_language(text):
"""Detect language using langdetect library - FIXED"""
if not text.strip():
return "⚠️ Please enter some text to detect its language", ""
if len(text.strip()) < 10:
return "⚠️ Text too short! Please enter at least 10 characters for accurate detection", ""
try:
# Use detect_langs to get probabilities
detections = detect_langs(text)
lang_code = detections[0].lang
confidence = int(detections[0].prob * 100)
# Fix common misdetection: 'so' for short English sentences
english_words = ['hello', 'how', 'are', 'you', 'the', 'and', 'today', 'world', 'good', 'morning']
if lang_code == 'so' and any(word in text.lower() for word in english_words):
lang_code = 'en'
# Recalculate confidence for English
for det in detections:
if det.lang == 'en':
confidence = int(det.prob * 100)
break
else:
confidence = 85
lang_name = LANGUAGES.get(lang_code, f"Unknown ({lang_code})")
result = f"🌍 **Detected Language:** {lang_name}"
details = f"📊 **Language Code:** `{lang_code}`\n🎯 **Confidence:** {confidence}%\n📝 **Characters:** {len(text)}"
return result, details
except LangDetectException:
return "❌ **Detection Failed**", "Could not detect language. Try longer text with complete sentences."
# Premium CSS
custom_css = """
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700&display=swap');
.gradio-container {
font-family: 'Poppins', sans-serif!important;
background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab)!important;
background-size: 400% 400%!important;
animation: gradientBG 15s ease infinite!important;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
#header {
text-align: center;
color: white;
padding: 40px 20px;
background: rgba(255, 255, 255, 0.15);
backdrop-filter: blur(20px);
border-radius: 30px;
margin: 20px;
border: 2px solid rgba(255, 255, 255, 0.3);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
}
#header h1 {
font-size: 3em;
font-weight: 700;
margin-bottom: 10px;
text-shadow: 2px 2px 10px rgba(0,0,0,0.3);
}
.gr-button-primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)!important;
border: none!important;
color: white!important;
font-weight: 600!important;
border-radius: 12px!important;
}
.gr-button-primary:hover {
transform: translateY(-3px)!important;
box-shadow: 0 10px 25px rgba(102, 126, 234, 0.4)!important;
}
#footer {
text-align: center;
color: white;
padding: 25px;
margin-top: 30px;
background: rgba(0, 0, 0, 0.2);
backdrop-filter: blur(10px);
border-radius: 20px;
}
"""
# Create Gradio App
with gr.Blocks() as demo:
gr.HTML("""
<div id="header">
<h1>🌍 Language Detection AI</h1>
<p>Task 3: Language Detection | CodeAlpha AI Internship 2026</p>
<p>Detect 20+ languages instantly using NLP</p>
</div>
""")
with gr.Row():
with gr.Column():
text_input = gr.Textbox(
label="Enter Text to Detect",
placeholder="Type at least 10 characters... Bonjour le monde, Hello world, مرحبا بالعالم...",
lines=5
)
detect_btn = gr.Button("🔍 Detect Language", variant="primary", size="lg")
gr.Examples(
examples=[
["Hello, how are you today? This is a test."],
["Bonjour le monde, comment allez-vous aujourd'hui?"],
["مرحبا بالعالم، كيف حالك اليوم؟"],
["Hola mundo, ¿cómo estás hoy?"],
["你好世界,你今天好吗?"],
["こんにちは世界、今日は元気ですか?"]
],
inputs=text_input,
label="Click any example:"
)
with gr.Column():
result_output = gr.Markdown(label="Detection Result")
details_output = gr.Markdown(label="Details")
detect_btn.click(
fn=detect_language,
inputs=text_input,
outputs=[result_output, details_output]
)
gr.HTML("""
<div id="footer">
<p>© 2026 CodeAlpha AI Internship | Built with ❤️ using Gradio + langdetect</p>
<p>🚀 Demonstrating NLP Skills: Language Detection + Text Analysis</p>
</div>
""")
demo.launch(css=custom_css, theme=gr.themes.Base())