honeyangelhp's picture
Update app.py
128c382 verified
raw
history blame
2.82 kB
# 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()