Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import os | |
import numpy as np | |
# Load data | |
companies = pd.read_pickle('jobs-data.pkl') | |
similarity = pd.read_pickle('similarity.pkl') | |
# st.write("DataFrame Columns:", df.columns) | |
# Placeholder for user authentication | |
def login_frm(): | |
username = st.text_input('Username') | |
password = st.text_input('Password', type='password') | |
if st.button('Login'): | |
if username == '1' and password == '2': | |
st.session_state['authenticated'] = True | |
st.success("Logged in successfully!") | |
else: | |
st.error("Invalid username or password") | |
# Recommendation Function | |
def recommendation(applicants, companies, similarity, num_recommendations=3): | |
try: | |
recommendations = {} | |
applicants['User ID'] = np.arange(len(applicants)) | |
for i, applicant in enumerate(applicants['User ID']): | |
# Get the index of the highest similarity scores for this applicant | |
sorted_company_indices = np.argsort(-similarity[i]) # Descending sort of scores | |
recommended_companies = companies.iloc[sorted_company_indices]['Major'].values[:num_recommendations] # Top 3 recommendations | |
recommendations[applicant] = recommended_companies | |
return recommendations | |
except IndexError: | |
return [] | |
def send_email(job): | |
# Dummy function to simulate email sending | |
st.success(f"Job details sent to your email: {job['Title']}") | |
def export_recommendations(jobs): | |
recommendations_df = pd.DataFrame(jobs) | |
st.download_button(label="Download Recommendations", data=recommendations_df.to_csv().encode('utf-8'), file_name='recommendations.csv', mime='text/csv') | |
def setup_session_state(): | |
if 'authenticated' not in st.session_state: | |
st.session_state['authenticated'] = False | |
if 'view' not in st.session_state: | |
st.session_state['view'] = 'home' | |
if 'view_favorites' not in st.session_state: | |
st.session_state['view_favorites'] = False | |
def side_bar(): | |
# Logo | |
logo_path = 'logo.jpg' | |
if os.path.exists(logo_path): | |
st.sidebar.image(logo_path,use_column_width=1,caption="Bridge Jobs - CẦU NỐI ĐẾN TƯƠNG LAI") | |
else: | |
st.sidebar.write("Logo not found.") | |
if st.sidebar.button('Home'): | |
st.session_state['view'] = 'home' | |
st.sidebar.button('Logout', on_click=lambda: st.session_state.update({'authenticated': False})) | |
def home_frm(): | |
st.markdown("# PTIT Job Recommendation") | |
col1, col2 = st.columns([1, 1]) | |
# Job Search and Filter | |
hard_skills = col1.text_input('Hard Skill, separated by a comma') # hard_skills = "Python, Machine Learning, Data Analysis" | |
col1.write("Example hard skills: Python, Machine Learning, Data Analysis") | |
soft_skills = col2.text_input('Soft Skill, separated by a comma') # "Teamwork, Communication, Problem-solving" | |
col2.write("Example soft skills: Teamwork, Communication, Problem-solving") | |
# Get recommendations | |
if st.button("Gợi ý"): | |
applicants = pd.DataFrame({ | |
'hard_skill': [hard_skills], | |
'soft_skill': [soft_skills] | |
}) | |
# Get recommendations | |
if hard_skills and soft_skills: | |
jobs = recommendation(applicants, companies, similarity) | |
if jobs: | |
st.write("Recommended Jobs:") | |
for job in jobs.values(): | |
for rec in job: | |
st.write(rec) | |
st.button("Export Recommendations", on_click=export_recommendations, args=(jobs,), key='export') | |
else: | |
st.write("No recommendations found.") | |
def prepare(): | |
# Initialize session state | |
setup_session_state() | |
# Authentication | |
if not st.session_state['authenticated']: | |
login_frm() | |
else: | |
side_bar() | |
if st.session_state['view'] == 'home': | |
home_frm() | |
elif st.session_state['view'] == 'details': | |
job_details_frm(st.session_state['job_index']) | |
elif st.session_state['view'] == 'favorites': | |
view_favorites_frm() | |
if __name__ == "__main__": | |
prepare() |