File size: 4,879 Bytes
ab78615
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
650d5b5
ab78615
 
 
 
 
 
 
 
 
 
 
650d5b5
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
123
124
125
import streamlit as st
import requests
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import warnings

# Suppress specific warnings related to missing ScriptRunContext
warnings.filterwarnings("ignore", message=".*missing ScriptRunContext.*")

# 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 real API
def get_scholarships(location, interests):
    # Example: Using a mock API or replace it with a real API URL
    # For now, we will use JSONPlaceholder for demonstration
    url = "https://jsonplaceholder.typicode.com/posts"  # Mock API
    response = requests.get(url)
    
    if response.status_code == 200:
        # Sample response (You should replace this with real scholarship data)
        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 real API
def get_internships():
    # Example: Using a mock API or replace it with a real API URL
    url = "https://jsonplaceholder.typicode.com/posts"  # Mock API
    response = requests.get(url)
    
    if response.status_code == 200:
        # Sample response (You should replace this with real internship data)
        return [{"jobtitle": f"Internship {i+1}", "company": "Sample Company", "location": "Remote", "snippet": post['body']} for i, post in enumerate(response.json())[: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]

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

# Your main logic here
def main():
    try:
        # Your main code logic
        pass
    except Exception as e:
        st.error(f"Error occurred: {e}")
    finally:
        # Cleanup actions if necessary
        pass

if __name__ == "__main__":
    main()