import pickle from ipywidgets import FileUpload, Button, Output, VBox from IPython.display import display from utils.parser import extract_text_from_pdf, extract_text_from_docx # Constants for file paths VECTORIZER_PATH = r'F:\New folder (2)\resume-analyzer\models\vectorizer.pkl' MODEL_PATH = r'F:\New folder (2)\resume-analyzer\models\model.pkl' # Load model and vectorizer def load_pickle(file_path): with open(file_path, 'rb') as file: return pickle.load(file) vectorizer = load_pickle(VECTORIZER_PATH) model = load_pickle(MODEL_PATH) # Function to predict resume category def predict_resume_category(text): vectorized_text = vectorizer.transform([text]) return model.predict(vectorized_text)[0] # Function to handle file upload and prediction def handle_file_upload(change): uploaded_file = list(file_upload.value.values())[0] file_name = uploaded_file['metadata']['name'] file_content = uploaded_file['content'] # Extract text based on file type if file_name.endswith(".pdf"): text = extract_text_from_pdf(file_content) elif file_name.endswith(".docx"): text = extract_text_from_docx(file_content) else: output.clear_output() with output: print("❌ Unsupported file format.") return if not text or not text.strip(): output.clear_output() with output: print("❌ No text extracted from the resume.") return # Predict and display result category = predict_resume_category(text) output.clear_output() with output: print(f"✅ Predicted Resume Category: {category}") # Widgets file_upload = FileUpload(accept='.pdf,.docx', multiple=False) file_upload.observe(handle_file_upload, names='value') output = Output() # Display widgets display(VBox([file_upload, output]))