import streamlit as st from gtts import gTTS import tempfile import requests from bs4 import BeautifulSoup from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # --- Set Page Config --- st.set_page_config( page_title="Education with Fun", layout="centered", page_icon="📘" # Changed to string emoji for compatibility ) # --- Background Image --- def set_bg(): st.markdown( f""" """, unsafe_allow_html=True ) set_bg() # --- Header Banner --- st.markdown( """

📘 Education with Fun

Learn Science with Stories and Audio (Grade 5 & 6)

""", unsafe_allow_html=True ) # --- Grade & Subject Selection --- grade = st.selectbox("🎓 Select Grade:", ["Grade 5", "Grade 6"]) subject = st.selectbox("📚 Select Subject:", ["Science"]) # --- Search online content --- def search_online_syllabus(grade, subject): urls = { "Grade 5": { "Science": [ "https://www.pctb.punjab.gov.pk/books", "https://www.cambridgeinternational.org/programmes-and-qualifications/cambridge-primary/curriculum/science/", "https://global.oup.com/education/content/primary/series/oxford-international-primary-science/" ] }, "Grade 6": { "Science": [ "https://www.pctb.punjab.gov.pk/books", "https://www.cambridgeinternational.org/programmes-and-qualifications/cambridge-primary/curriculum/science/", "https://global.oup.com/education/content/primary/series/oxford-international-primary-science/" ] } } combined_text = "" for url in urls.get(grade, {}).get(subject, []): try: res = requests.get(url, timeout=10) soup = BeautifulSoup(res.text, 'html.parser') text = soup.get_text(separator=' ') combined_text += text + "\n\n" except Exception as e: combined_text += f"[Error fetching {url}]: {str(e)}\n" return combined_text # --- Answer Generation --- def get_answer(user_question, syllabus_text): chunks = [chunk.strip() for chunk in syllabus_text.split('\n\n') if chunk.strip()] vectorizer = TfidfVectorizer().fit_transform([user_question] + chunks) cosine_similarities = cosine_similarity(vectorizer[0:1], vectorizer[1:]).flatten() top_idx = cosine_similarities.argmax() best_chunk = chunks[top_idx] beginner = f"📗 سیدھا سا جواب: {best_chunk}" story = f"📙 کہانی کی صورت میں: ایک دن ایک طالب علم نے پوچھا، '{user_question}'۔ استاد نے جواب دیا: {best_chunk}" return beginner, story # --- Urdu Text-to-Speech --- def text_to_speech_urdu(text): tts = gTTS(text=text, lang='ur') tmp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") tts.save(tmp_file.name) return tmp_file.name # --- Question Input --- st.markdown("### ❓ Ask your question (Urdu or English):") question = st.text_area("", placeholder="e.g., What is evaporation? / بخارات کیا ہوتے ہیں؟") # --- Submit Button --- if st.button("🔍 Get Answer"): with st.spinner("📡 Searching online syllabus..."): syllabus_text = search_online_syllabus(grade, subject) beginner, story = get_answer(question, syllabus_text) st.subheader("💡 Beginner-Friendly Answer:") st.success(beginner) st.subheader("📖 Storytelling Style Answer:") st.info(story) if st.button("🔈 Hear Urdu Audio"): audio_path = text_to_speech_urdu(beginner + "۔ " + story) st.audio(audio_path, format='audio/mp3')