Spaces:
Runtime error
Runtime error
File size: 2,270 Bytes
4b63522 39fb762 4b63522 39fb762 4b63522 39fb762 4b63522 39fb762 4b63522 | 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 | import fitz # PyMuPDF
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import os
import requests
from functools import wraps
from flask import request, jsonify
def extract_text_from_pdf(file_storage):
with fitz.open(stream=file_storage.read(), filetype="pdf") as doc:
return " ".join([page.get_text() for page in doc])
def rank_resumes_by_similarity(resume_files, job_description):
resume_texts = [extract_text_from_pdf(f) for f in resume_files]
documents = [job_description] + resume_texts
vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix = vectorizer.fit_transform(documents)
job_vector = tfidf_matrix[0]
resume_vectors = tfidf_matrix[1:]
similarities = cosine_similarity(job_vector, resume_vectors).flatten()
ranked = sorted(zip(resume_files, similarities), key=lambda x: x[1], reverse=True)
return [
{"filename": file.filename, "score": round(score, 4)}
for file, score in ranked
]
SUPABASE_URL = os.getenv("SUPABASE_URL")
SUPABASE_API_KEY = os.getenv("SUPABASE_API_KEY")
def require_api_key(f):
@wraps(f)
def decorated_function(*args, **kwargs):
auth_header = request.headers.get('Authorization')
if not auth_header or not auth_header.startswith('Bearer '):
return jsonify({"error": "Missing or invalid Authorization header."}), 401
token = auth_header.split("Bearer ")[1].strip()
# Call Supabase REST API to validate token
headers = {
"apikey": SUPABASE_API_KEY,
"Authorization": f"Bearer {SUPABASE_API_KEY}", # service role
"Content-Type": "application/json"
}
url = f"{SUPABASE_URL}/rest/v1/users?api_key=eq.{token}"
response = requests.get(url, headers=headers)
if response.status_code != 200:
return jsonify({"error": "Failed to contact Supabase"}), 500
user_data = response.json()
if not user_data:
return jsonify({"error": "Invalid or revoked API key."}), 403
# Optionally attach user to request (like before)
request.user = user_data[0]
return f(*args, **kwargs)
return decorated_function
|