Navya-Sree's picture
Update app.py
5ba68ca verified
# IMPORT FIX: Handle huggingface_hub compatibility
import sys
if "huggingface_hub" in sys.modules:
sys.modules.pop("huggingface_hub")
import huggingface_hub
sys.modules["huggingface_hub"] = huggingface_hub
import gradio as gr
import json
import numpy as np
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import pdfplumber
from utils import extract_skills, clean_text
# Load job roles data
with open('job_roles.json') as f:
job_roles = json.load(f)
# Load Sentence-BERT model
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
# Precompute job role embeddings
role_descriptions = [f"{role['title']}: {role['description']} Skills: {', '.join(role['skills'])}"
for role in job_roles]
role_embeddings = model.encode(role_descriptions)
def analyze_resume(resume_file):
# Extract text from PDF
text = ""
with pdfplumber.open(resume_file) as pdf:
for page in pdf.pages:
text += page.extract_text()
if not text:
return "Error: Could not extract text from PDF"
cleaned_text = clean_text(text)
# Get resume embedding
resume_embedding = model.encode([cleaned_text])[0]
# Calculate similarities
similarities = cosine_similarity([resume_embedding], role_embeddings)[0]
top_indices = np.argsort(similarities)[-3:][::-1]
# Prepare results
results = []
for idx in top_indices:
role = job_roles[idx]
resume_skills = extract_skills(cleaned_text)
required_skills = role['skills']
matching_skills = list(set(resume_skills) & set(required_skills))
missing_skills = list(set(required_skills) - set(resume_skills))
results.append({
"title": role['title'],
"description": role['description'],
"matching_skills": matching_skills,
"missing_skills": missing_skills,
"similarity": f"{similarities[idx]:.2f}"
})
return results
# Gradio interface
with gr.Blocks(title="Career Path Recommender") as demo:
gr.Markdown("# ๐Ÿš€ Career Path Recommender")
gr.Markdown("Upload your resume to discover your top 3 career matches with skill gap analysis")
with gr.Row():
# FIXED: Changed type to 'filepath'
resume_input = gr.File(label="Upload Resume (PDF)", type="filepath")
output = gr.JSON(label="Recommended Career Paths")
submit_btn = gr.Button("Analyze Resume")
submit_btn.click(
fn=analyze_resume,
inputs=resume_input,
outputs=output
)
if __name__ == "__main__":
demo.launch()