RecommendJobs / app.py
thuychang404's picture
Update app.py
1e69ce9 verified
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()