File size: 2,110 Bytes
d22d262
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e0e8487
d22d262
 
 
 
 
 
 
 
 
 
 
 
 
7e70df5
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
45
46
47
48
49
50
51
52
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import pandas as pd
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['minYoE']
  results = {}
  role_req_exp = cosine_similarity(st.encode(cv['experiences']).reshape(1,-1), st.encode(job['role']+'\n'+job['jobDesc']).reshape(1,-1))[0][0] if cv['experiences'] != '[]' else 0
  role_pos = cosine_similarity(st.encode(cv['positions']).reshape(1,-1), st.encode(job['role']).reshape(1,-1))[0][0] if cv['positions'] != '[]' else 0
  major_similarity = cosine_similarity(st.encode(cv['userMajors']).reshape(1,-1), st.encode(job['majors']).reshape(1,-1))[0][0] if cv['userMajors'] != '[]' else 0
  skill_similarity = cosine_similarity(st.encode(cv['skills']).reshape(1,-1), st.encode(job['skills']).reshape(1,-1))[0][0] if cv['skills'] != '[]' else 0
  score_yoe = 0.5 if diffYoe == -1 else (0 if diffYoe < 0 else 1)
  score = 0.35 * role_req_exp + 0.1 * role_pos  + 0.15 * major_similarity + 0.3* score_yoe + 0.1 * skill_similarity 
  data = [{
    'role_req-exp': role_req_exp,      
    'role_pos': role_pos,            
    'major_similarity':  major_similarity,  
    'skill_similarity':  skill_similarity,
    'score': score           
  }]
  X = pd.DataFrame.from_dict(data)
  res = model.predict(X)
  results['score'] = model.predict_proba(X)[:, 1]
  results['is_accepted'] = res[0]
  return results