import streamlit as st import requests from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity from transformers import MarianMTModel, MarianTokenizer import sentencepiece # Set up the Streamlit page st.title("AI Opportunity Finder for Youth") st.write("Find Scholarships, Internships, Online Courses, and more!") # Function to get scholarships data from a mock API def get_scholarships(location, interests): url = "https://jsonplaceholder.typicode.com/posts" # Mock API for testing response = requests.get(url) if response.status_code == 200: # Return a list of mock scholarships return [{"title": f"Scholarship {i+1}", "description": post['body'], "eligibility": "Any student from any background."} for i, post in enumerate(response.json())[:5]] else: return [] # Function to get internships data from a mock API def get_internships(): url = "https://jsonplaceholder.typicode.com/posts" # Mock API for testing response = requests.get(url) if response.status_code == 200: # Return a list of mock internships return [{"jobtitle": f"Internship {i+1}", "company": "Sample Company", "location": "Remote", "snippet": "Description of the internship."} for i in range(5)] else: return [] # Function to recommend opportunities based on user input def recommend_opportunities(user_interests, user_skills, opportunities): # Combine user profile into a single string user_profile = [f"{user_interests} {user_skills}"] # Create text data for opportunities based on description & eligibility opportunities_text = [f"{opportunity['description']} {opportunity['eligibility']}" for opportunity in opportunities] # Vectorize the text using TF-IDF vectorizer = TfidfVectorizer(stop_words='english') tfidf_matrix = vectorizer.fit_transform(opportunities_text + user_profile) # Compute cosine similarity cosine_sim = cosine_similarity(tfidf_matrix[-1], tfidf_matrix[:-1]) # Get the indices of the top 5 recommended opportunities recommendations = cosine_sim[0].argsort()[-5:][::-1] # Return recommended opportunities return [opportunities[i] for i in recommendations] # Function to load MarianMT translation model def load_translation_model(target_language): model_name = f'Helsinki-NLP/opus-mt-en-{target_language}' tokenizer = MarianTokenizer.from_pretrained(model_name) model = MarianMTModel.from_pretrained(model_name) return model, tokenizer # Function to translate text using MarianMT def translate_text(text, target_language): try: model, tokenizer = load_translation_model(target_language) # Tokenize and translate text tokens = tokenizer(text, return_tensors="pt", padding=True, truncation=True) translated = model.generate(**tokens) translated_text = tokenizer.decode(translated[0], skip_special_tokens=True) return translated_text except Exception as e: return f"Error during translation: {str(e)}" # User input for profile st.sidebar.header("User Profile") location = st.sidebar.text_input("Location", "Pakistan") # Default to 'Pakistan' skills = st.sidebar.text_input("Skills (e.g., Python, Marketing)") interests = st.sidebar.text_input("Interests (e.g., Technology, Science)") # Fetch scholarships based on user input scholarships = get_scholarships(location, interests) # Display scholarships if available if scholarships: st.write("Scholarships found:") for scholarship in scholarships: st.write(f"Title: {scholarship['title']}") st.write(f"Description: {scholarship['description']}") st.write(f"Eligibility: {scholarship['eligibility']}") st.write("---") else: st.write("No scholarships found based on your criteria.") # Fetch internships based on user input internships = get_internships() # Display internships if available if internships: st.write("Internships found:") for internship in internships: st.write(f"Title: {internship['jobtitle']}") st.write(f"Company: {internship['company']}") st.write(f"Location: {internship['location']}") st.write(f"Snippet: {internship['snippet']}") st.write("---") else: st.write("No internships found.") # AI-based recommendations for opportunities if st.sidebar.button("Get AI Recommendations"): # Combine scholarships and internships for recommendations all_opportunities = scholarships + internships # Get AI recommendations based on user input recommended_opportunities = recommend_opportunities(interests, skills, all_opportunities) # Display recommended opportunities st.write("Recommended Opportunities based on your profile:") for opportunity in recommended_opportunities: st.write(f"Title: {opportunity['title']}") st.write(f"Description: {opportunity['description']}") st.write(f"Eligibility: {opportunity.get('eligibility', 'Not available')}") st.write("---") # Language selection languages = { 'English': 'english', 'German': 'deutch', 'French': 'french', 'Spanish': 'spanish', 'Italian': 'italian', 'Portuguese': 'portugese', 'Chinese': 'chinese', 'Arabic': 'arabic', 'Russian': 'russian', 'Japanese': 'japanese', 'Korean': 'korean', 'Urdu': 'urdu' } # Dropdown for language selection selected_language = st.selectbox("Select Language", list(languages.keys())) # Translate the opportunity description based on the selected language if selected_language != 'English': # Translate the title of the app or a sample text translated_text = translate_text("Hello, welcome to AI Opportunity Finder!", languages[selected_language]) st.write(f"Translated Text ({selected_language}): {translated_text}")