webcodelab commited on
Commit
4a365d5
·
verified ·
1 Parent(s): 1bef8f4

Update app/ranker.py

Browse files
Files changed (1) hide show
  1. app/ranker.py +14 -9
app/ranker.py CHANGED
@@ -2,26 +2,31 @@
2
  import os
3
  from sentence_transformers import SentenceTransformer, util
4
  from .utils import extract_text_from_pdf
 
5
 
6
  # Set safe cache directories for Hugging Face models (especially for read-only environments like Hugging Face Spaces)
7
  os.environ["HF_HOME"] = "/tmp/hf"
8
  os.environ["TRANSFORMERS_CACHE"] = "/tmp/hf"
9
  os.environ["SENTENCE_TRANSFORMERS_HOME"] = "/tmp/hf"
10
 
11
- # Load the model globally
12
- model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
 
 
 
 
13
 
14
  def rank_resumes_by_semantic_similarity(resume_files, job_description):
15
- resume_texts = [extract_text_from_pdf(f) for f in resume_files]
16
  job_embedding = model.encode(job_description, convert_to_tensor=True)
17
-
18
  results = []
19
- for file, resume_text in zip(resume_files, resume_texts):
20
- resume_embedding = model.encode(resume_text, convert_to_tensor=True)
21
- similarity = util.cos_sim(job_embedding, resume_embedding).item()
 
 
22
  results.append({
23
- "filename": file.filename,
24
- "score": round(similarity, 4)
25
  })
26
 
27
  results.sort(key=lambda x: x['score'], reverse=True)
 
2
  import os
3
  from sentence_transformers import SentenceTransformer, util
4
  from .utils import extract_text_from_pdf
5
+ import PyPDF2
6
 
7
  # Set safe cache directories for Hugging Face models (especially for read-only environments like Hugging Face Spaces)
8
  os.environ["HF_HOME"] = "/tmp/hf"
9
  os.environ["TRANSFORMERS_CACHE"] = "/tmp/hf"
10
  os.environ["SENTENCE_TRANSFORMERS_HOME"] = "/tmp/hf"
11
 
12
+
13
+ model = SentenceTransformer('all-MiniLM-L6-v2')
14
+
15
+ def extract_text_from_pdf(file_storage):
16
+ reader = PyPDF2.PdfReader(file_storage)
17
+ return " ".join([page.extract_text() or '' for page in reader.pages])
18
 
19
  def rank_resumes_by_semantic_similarity(resume_files, job_description):
 
20
  job_embedding = model.encode(job_description, convert_to_tensor=True)
 
21
  results = []
22
+
23
+ for resume_file in resume_files:
24
+ text = extract_text_from_pdf(resume_file)
25
+ resume_embedding = model.encode(text, convert_to_tensor=True)
26
+ score = util.cos_sim(job_embedding, resume_embedding).item()
27
  results.append({
28
+ "filename": resume_file.filename,
29
+ "score": round(score, 4)
30
  })
31
 
32
  results.sort(key=lambda x: x['score'], reverse=True)