import streamlit as st import docx2txt import fitz # PyMuPDF import re import nltk from collections import Counter nltk.download('punkt') # Helper function to extract text from uploaded resume def extract_text(uploaded_file): if uploaded_file.name.endswith('.pdf'): pdf_document = fitz.open(stream=uploaded_file.read(), filetype="pdf") text = "" for page in pdf_document: text += page.get_text() return text elif uploaded_file.name.endswith('.docx'): return docx2txt.process(uploaded_file) else: return None # Simple JD keyword extractor def extract_keywords(jd_text): words = nltk.word_tokenize(jd_text) words = [w.lower() for w in words if w.isalpha()] common_words = Counter(words) keywords = [word for word, freq in common_words.items() if freq >= 1] return keywords # Simple resume enhancer def enhance_resume(resume_text, keywords): enhanced_text = resume_text missing_keywords = [] for keyword in keywords: if keyword.lower() not in resume_text.lower(): missing_keywords.append(keyword) if missing_keywords: enhanced_text += "\n\nAdditional Skills: " + ", ".join(missing_keywords) return enhanced_text, missing_keywords # Streamlit App st.title("JobForge - Resume Optimizer") st.write("Upload your resume and paste a job description to optimize your resume!") uploaded_resume = st.file_uploader("Upload Your Resume", type=["pdf", "docx"]) job_description = st.text_area("Paste Job Description Here") if st.button("Forge My Resume"): if uploaded_resume and job_description: with st.spinner('Forging your resume...'): resume_text = extract_text(uploaded_resume) jd_keywords = extract_keywords(job_description) enhanced_resume, missing_keywords = enhance_resume(resume_text, jd_keywords) st.subheader("Optimized Resume Preview:") st.text_area("", enhanced_resume, height=400) st.subheader("Match Score:") match_percent = (len(jd_keywords) - len(missing_keywords)) / len(jd_keywords) * 100 st.write(f"Your resume matches {match_percent:.2f}% of the job description.") st.subheader("Missing Keywords:") if missing_keywords: st.write(", ".join(missing_keywords)) else: st.success("Your resume covers all keywords!") else: st.error("Please upload a resume and paste a job description to proceed.")