# Import necessary libraries from convert import ExtractPDFText from ATS_score import calculateATSscore from model import modelFeedback import streamlit as st import time # Streamlit app title st.title("Resume Screening Assistance") # Initialize session state variables if "resume_data" not in st.session_state: st.session_state.resume_data = [] if "jobdescription" not in st.session_state: st.session_state.jobdescription = "" #Upload Resumes (Multiple PDFs) st.session_state.jobdescription = st.text_area("Paste the job description below:") #Input Job Description pdf_files = st.file_uploader("Upload your resumes (PDF only):", type="pdf", accept_multiple_files=True) if pdf_files: st.session_state.resume_data = [] for pdf in pdf_files: extracted_text = ExtractPDFText(pdf) st.session_state.resume_data.append({"name": pdf.name, "text": extracted_text}) st.success(f"{len(pdf_files)} resumes uploaded and processed successfully!") submit = st.button("Submit") # Define start function def start(): if st.session_state.resume_data and st.session_state.jobdescription: st.subheader("Top Matches:") # Calculate ATS scores and store them in the resumes for resume in st.session_state.resume_data: with st.spinner(f"Analyzing {resume['name']}..."): # Calculate ATS score ATS_score = calculateATSscore(resume["text"], st.session_state.jobdescription) if ATS_score is None: st.warning(f"Warning: Unable to calculate ATS score for {resume['name']}.") continue # Skip this resume if ATS score is None resume["ATS_score"] = ATS_score # Add ATS score to resume data # Generate feedback from model model_feedback = modelFeedback(ATS_score, resume["text"]) resume["model_feedback"] = model_feedback # Store model feedback in the resume data time.sleep(1) # Optional: Simulate processing time # Sort resumes based on ATS score in descending order sorted_resumes = sorted(st.session_state.resume_data, key=lambda x: x["ATS_score"], reverse=True) # Display the results for rank, resume in enumerate(sorted_resumes, 1): st.write(f"##### Resume: {resume['name']}") st.write(f"**ATS Score:** {int(resume['ATS_score']*100)}%") st.write(f"**Ranking:** {rank}") st.write.(f"**Summary:** {model_feedback}") st.write("---") else: st.info("Please upload resumes and provide a job description.") # Process when submit button is clicked if submit: start()