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("---")