File size: 2,816 Bytes
7a80626
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137adc6
7a80626
 
137adc6
7a80626
 
 
d1fdd60
7a80626
 
 
 
 
cebe82a
7a80626
 
137adc6
057b8e4
afbdb1b
 
79489bd
fa78bf7
286c609
a627a66
 
 
 
ed01864
 
137adc6
ed01864
 
286c609
137adc6
 
128c382
137adc6
1fdda22
286c609
137adc6
 
f51cf5e
 
 
d75019b
137adc6
f51cf5e
137adc6
286c609
afbdb1b
a627a66
03de099
137adc6
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 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()