File size: 2,786 Bytes
7a80626
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d1fdd60
7a80626
 
d1fdd60
7a80626
 
 
d1fdd60
7a80626
 
 
 
 
 
 
 
057b8e4
afbdb1b
 
79489bd
fa78bf7
286c609
a627a66
 
 
 
ed01864
 
 
 
 
286c609
 
 
 
f51cf5e
 
a627a66
286c609
f51cf5e
 
 
 
 
d75019b
f51cf5e
 
bc3fe81
286c609
afbdb1b
a627a66
03de099
fa78bf7
03de099
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 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()