File size: 1,712 Bytes
9a6af66
 
cd0458c
 
9a6af66
cd0458c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9a6af66
 
 
 
cd0458c
 
 
 
 
 
 
 
 
 
9a6af66
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
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import pickle 
st = SentenceTransformer('all-mpnet-base-v2')
filename = 'svc.pkl'

with open(filename, 'rb') as file:
  model = pickle.load(file)

# role_req-exp        0.341522
# role_pos            0.350747
# major_similarity    0.846268
# skill_similarity    0.774542
# score               0.986356
# cv = {
#     "experiences": str(body.cv.experiences), 
#     "positions": str(positions), 
#     "userMajors": str(userMajors), 
#     "skills": str(body.cv.skills), 
#     "yoe": yoe
# }
# job = {
#     "jobDesc": body.job.jobDesc, 
#     "role": body.job.role, 
#     "majors": str(body.job.majors), 
#     "skills": str(body.job.skills), 
#     "minYoE": body.job.minYoE
# }

def predict(cv, job):
  diffYoe = cv.yoe - job.minimumYoe
  results = {}
  role_req_exp = cosine_similarity(st.encode(cv['experiences']), st.encode(job['role']+' '+job['jobDesc']))
  role_pos = cosine_similarity(st.encode(cv['positions']), st.encode(job['role']))
  major_similarity = cosine_similarity(st.encode(cv['userMajors']), st.encode(job['majors']))
  skill_similarity = cosine_similarity(st.encode(cv['skills']), st.encode(job['skills']))
  score_yoe = 0.5 if diffYoe == -1 else (1 if diffYoe > 0 else 0)
  score = 0.35 * role_req_exp + 0.1 * role_pos  + 0.15 * major_similarity + 0.3* score_yoe + 0.1 * skill_similarity 
  X = np.array([role_req_exp, role_pos, major_similarity, skill_similarity, score]).reshape(1, -1)
  res = model.predict(X)
  results['score'] = model.predict(X)[:, 1]
  results['is_accepted'] = np.argmax(res) 
  return results