Spaces:
Runtime error
Runtime error
# 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 button | |
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 | |
resume["model_feedback"] = modelFeedback(ATS_score, resume["text"]) # 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:** {resume['model_feedback']}") # Display the individual feedback for each resume | |
st.write("---") | |
else: | |
st.info("Please upload resumes and provide a job description.") | |
# Process when submit button is clicked | |
if submit: | |
start() | |