Spaces:
Running
Running
File size: 6,419 Bytes
ab78615 2ceeaba ab78615 2ceeaba d6f26da 2ceeaba ab78615 2ceeaba ab78615 2ceeaba ab78615 d6f26da 2ceeaba ab78615 2ceeaba ab78615 8b29264 ab78615 d6f26da ab78615 d6f26da 2ceeaba d6f26da 2ceeaba ab78615 d6f26da ab78615 d6f26da 2ceeaba d6f26da ab78615 d6f26da 2ceeaba d6f26da ab78615 d6f26da ab78615 2ceeaba ab78615 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
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
# Set up the Streamlit page
st.title("AI Opportunity Finder for Youth")
st.write("Find Scholarships, Internships, Online Courses, and more!")
# Language Translation Function
def translate_text(text, target_lang='de'):
# Use Hugging Face's MarianMT for translation
model_name = f'Helsinki-NLP/opus-mt-en-{target_lang}'
model = MarianMTModel.from_pretrained(model_name)
tokenizer = MarianTokenizer.from_pretrained(model_name)
translated = model.generate(**tokenizer(text, return_tensors="pt", padding=True, truncation=True))
translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
return translated_text
# Mock function to get data from APIs (replace with actual API calls)
def get_scholarships(country, interests):
url = f"https://jsonplaceholder.typicode.com/posts" # Mock API (replace with real one)
# Simulate API response based on country
if country == "USA":
return [{"title": f"USA Scholarship {i+1}", "description": f"Description for scholarship {i+1} in USA.", "eligibility": "Any student from USA."} for i in range(5)]
elif country == "Germany":
return [{"title": f"Germany Scholarship {i+1}", "description": f"Description for scholarship {i+1} in Germany.", "eligibility": "Any student from Germany."} for i in range(5)]
else:
return [{"title": f"Scholarship {i+1}", "description": f"Description for scholarship {i+1} in {country}.", "eligibility": "Any student from any background."} for i in range(5)]
def get_internships(country):
url = f"https://jsonplaceholder.typicode.com/posts" # Mock API for testing
# Simulate internships data
if country == "USA":
return [{"jobtitle": f"Internship {i+1}", "company": "USA Company", "location": "USA", "snippet": "Description of internship in USA."} for i in range(5)]
elif country == "Germany":
return [{"jobtitle": f"Internship {i+1}", "company": "Germany Company", "location": "Germany", "snippet": "Description of internship in Germany."} for i in range(5)]
else:
return [{"jobtitle": f"Internship {i+1}", "company": "Sample Company", "location": "Remote", "snippet": "Description of internship."} for i in range(5)]
def recommend_opportunities(user_interests, user_skills, opportunities):
user_profile = [f"{user_interests} {user_skills}"]
opportunities_text = [f"{opportunity.get('description', 'No description available')} {opportunity.get('eligibility', 'No eligibility available')}" 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 top 5 recommendations
recommendations = cosine_sim[0].argsort()[-5:][::-1]
return [opportunities[i] for i in recommendations]
# Form to gather user profile and country selection
with st.form(key='user_form'):
st.sidebar.header("User Profile")
location = st.selectbox("Select your Country", ["USA", "Germany", "UK", "India", "Australia", "Pakistan"]) # You can add more countries here
skills = st.text_input("Skills (e.g., Python, Marketing)")
interests = st.text_input("Interests (e.g., Technology, Science)")
target_language = st.selectbox("Select target language", ['de', 'fr', 'es', 'it', 'pt']) # Available language codes for translation
submit_button = st.form_submit_button("Find Opportunities")
# Fetch data based on the user input
if submit_button:
# Fetch scholarships and internships based on the selected country and profile
scholarships = get_scholarships(location, interests)
internships = get_internships(location)
# Display Scholarships
if scholarships:
st.write("Scholarships found:")
for scholarship in scholarships:
title = translate_text(scholarship.get('title', 'No title available'), target_language)
description = translate_text(scholarship.get('description', 'No description available'), target_language)
eligibility = translate_text(scholarship.get('eligibility', 'No eligibility available'), target_language)
st.write(f"Title: {title}")
st.write(f"Description: {description}")
st.write(f"Eligibility: {eligibility}")
st.write("---")
else:
st.write("No scholarships found for the selected country.")
# Display Internships
if internships:
st.write("Internships found:")
for internship in internships:
title = translate_text(internship.get('jobtitle', 'No title available'), target_language)
company = translate_text(internship.get('company', 'No company available'), target_language)
location = translate_text(internship.get('location', 'No location available'), target_language)
snippet = translate_text(internship.get('snippet', 'No snippet available'), target_language)
st.write(f"Title: {title}")
st.write(f"Company: {company}")
st.write(f"Location: {location}")
st.write(f"Snippet: {snippet}")
st.write("---")
else:
st.write("No internships found for the selected country.")
# AI Recommendations based on interests and skills
all_opportunities = scholarships + internships
recommended_opportunities = recommend_opportunities(interests, skills, all_opportunities)
st.write("AI-based Recommended Opportunities based on your profile:")
for opportunity in recommended_opportunities:
title = translate_text(opportunity.get('title', 'No title available'), target_language)
description = translate_text(opportunity.get('description', 'No description available'), target_language)
eligibility = translate_text(opportunity.get('eligibility', 'Not available'), target_language)
st.write(f"Title: {title}")
st.write(f"Description: {description}")
st.write(f"Eligibility: {eligibility}")
st.write("---")
|