import streamlit as st import pandas as pd import matplotlib.pyplot as plt from convert import ExtractPDFText from ATS_score import calculateATSscore, skill_gap_analysis from model import modelFeedback import time # Streamlit app title st.title("Resume Screening Assistance") # Define required skills for the job required_skills = ["Python", "Machine Learning", "Cloud (AWS/Azure)", "Data Analysis", "React", "Docker"] # Job Description Input job_description = st.text_area("Paste the job description below:") # Upload Resumes uploaded_files = st.file_uploader("Upload your resumes (PDF only):", type="pdf", accept_multiple_files=True) if uploaded_files and job_description: resumes_data = [] for file in uploaded_files: text = ExtractPDFText(file) ats_score = calculateATSscore(text, job_description) skill_analysis = skill_gap_analysis(text, required_skills) feedback = modelFeedback(ats_score, text, skill_analysis['missing']) resumes_data.append({ "name": file.name, "ATS Score": ats_score, "Skills Present": skill_analysis['present'], "Missing Skills": skill_analysis['missing'], "Feedback": feedback }) # Sort resumes by ATS score sorted_resumes = sorted(resumes_data, key=lambda x: x["ATS Score"], reverse=True) # Display results st.subheader("Top Matches:") for idx, resume in enumerate(sorted_resumes, 1): st.write(f"### {idx}. {resume['name']}") st.write(f"**ATS Score:** {resume['ATS Score']*100:.0f}%") st.write("**Missing Skills:**", ", ".join(resume["Missing Skills"]) if resume["Missing Skills"] else "None") st.write("**Feedback:**", resume["Feedback"]) st.write("---") # Skill Gap Analysis Table st.subheader("Skill Gap Analysis") for resume in sorted_resumes: st.write(f"**{resume['name']}**") skill_data = { "Required Skills": required_skills, "Present in Resume": ["✅" if skill in resume["Skills Present"] else "❌" for skill in required_skills], "Missing": [skill if skill in resume["Missing Skills"] else "—" for skill in required_skills] } df = pd.DataFrame(skill_data) st.table(df) # Visualize ATS Scores st.subheader("ATS Score Distribution") names = [r["name"] for r in sorted_resumes] scores = [r["ATS Score"]*100 for r in sorted_resumes] plt.figure(figsize=(8, 5)) plt.bar(names, scores) plt.title("ATS Scores by Resume") plt.ylabel("ATS Score (%)") plt.xticks(rotation=45) st.pyplot(plt)