Update classificator.py
Browse files- classificator.py +51 -51
classificator.py
CHANGED
@@ -1,52 +1,52 @@
|
|
1 |
-
from sentence_transformers import SentenceTransformer
|
2 |
-
from sklearn.metrics.pairwise import cosine_similarity
|
3 |
-
import numpy as np
|
4 |
-
import pandas as pd
|
5 |
-
import pickle
|
6 |
-
st = SentenceTransformer('all-mpnet-base-v2')
|
7 |
-
filename = 'svc.pkl'
|
8 |
-
|
9 |
-
with open(filename, 'rb') as file:
|
10 |
-
model = pickle.load(file)
|
11 |
-
|
12 |
-
# role_req-exp 0.341522
|
13 |
-
# role_pos 0.350747
|
14 |
-
# major_similarity 0.846268
|
15 |
-
# skill_similarity 0.774542
|
16 |
-
# score 0.986356
|
17 |
-
# cv = {
|
18 |
-
# "experiences": str(body.cv.experiences),
|
19 |
-
# "positions": str(positions),
|
20 |
-
# "userMajors": str(userMajors),
|
21 |
-
# "skills": str(body.cv.skills),
|
22 |
-
# "yoe": yoe
|
23 |
-
# }
|
24 |
-
# job = {
|
25 |
-
# "jobDesc": body.job.jobDesc,
|
26 |
-
# "role": body.job.role,
|
27 |
-
# "majors": str(body.job.majors),
|
28 |
-
# "skills": str(body.job.skills),
|
29 |
-
# "minYoE": body.job.minYoE
|
30 |
-
# }
|
31 |
-
|
32 |
-
def predict(cv, job):
|
33 |
-
diffYoe = cv['yoe'] - job['minYoE']
|
34 |
-
results = {}
|
35 |
-
role_req_exp = cosine_similarity(st.encode(cv['experiences']).reshape(1,-1), st.encode(job['role']+'\n'+job['jobDesc']).reshape(1,-1))[0][0]
|
36 |
-
role_pos = cosine_similarity(st.encode(cv['positions']).reshape(1,-1), st.encode(job['role']).reshape(1,-1))[0][0]
|
37 |
-
major_similarity = cosine_similarity(st.encode(cv['userMajors']).reshape(1,-1), st.encode(job['majors']).reshape(1,-1))[0][0]
|
38 |
-
skill_similarity = cosine_similarity(st.encode(cv['skills']).reshape(1,-1), st.encode(job['skills']).reshape(1,-1))[0][0]
|
39 |
-
score_yoe = 0.5 if diffYoe == -1 else (0 if diffYoe < 0 else 1)
|
40 |
-
score = 0.35 * role_req_exp + 0.1 * role_pos + 0.15 * major_similarity + 0.3* score_yoe + 0.1 * skill_similarity
|
41 |
-
data = [{
|
42 |
-
'role_req-exp': role_req_exp,
|
43 |
-
'role_pos': role_pos,
|
44 |
-
'major_similarity': major_similarity,
|
45 |
-
'skill_similarity': skill_similarity,
|
46 |
-
'score': score
|
47 |
-
}]
|
48 |
-
X = pd.DataFrame.from_dict(data)
|
49 |
-
res = model.predict(X)
|
50 |
-
results['score'] = model.predict_proba(X)[:, 1]
|
51 |
-
results['is_accepted'] = np.argmax(res)
|
52 |
return results
|
|
|
1 |
+
from sentence_transformers import SentenceTransformer
|
2 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
3 |
+
import numpy as np
|
4 |
+
import pandas as pd
|
5 |
+
import pickle
|
6 |
+
st = SentenceTransformer('all-mpnet-base-v2')
|
7 |
+
filename = 'svc.pkl'
|
8 |
+
|
9 |
+
with open(filename, 'rb') as file:
|
10 |
+
model = pickle.load(file)
|
11 |
+
|
12 |
+
# role_req-exp 0.341522
|
13 |
+
# role_pos 0.350747
|
14 |
+
# major_similarity 0.846268
|
15 |
+
# skill_similarity 0.774542
|
16 |
+
# score 0.986356
|
17 |
+
# cv = {
|
18 |
+
# "experiences": str(body.cv.experiences),
|
19 |
+
# "positions": str(positions),
|
20 |
+
# "userMajors": str(userMajors),
|
21 |
+
# "skills": str(body.cv.skills),
|
22 |
+
# "yoe": yoe
|
23 |
+
# }
|
24 |
+
# job = {
|
25 |
+
# "jobDesc": body.job.jobDesc,
|
26 |
+
# "role": body.job.role,
|
27 |
+
# "majors": str(body.job.majors),
|
28 |
+
# "skills": str(body.job.skills),
|
29 |
+
# "minYoE": body.job.minYoE
|
30 |
+
# }
|
31 |
+
|
32 |
+
def predict(cv, job):
|
33 |
+
diffYoe = cv['yoe'] - job['minYoE']
|
34 |
+
results = {}
|
35 |
+
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
|
36 |
+
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
|
37 |
+
major_similarity = cosine_similarity(st.encode(cv['userMajors']).reshape(1,-1), st.encode(job['majors']).reshape(1,-1))[0][0] if cv['useMajors'] != '[]' else 0
|
38 |
+
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
|
39 |
+
score_yoe = 0.5 if diffYoe == -1 else (0 if diffYoe < 0 else 1)
|
40 |
+
score = 0.35 * role_req_exp + 0.1 * role_pos + 0.15 * major_similarity + 0.3* score_yoe + 0.1 * skill_similarity
|
41 |
+
data = [{
|
42 |
+
'role_req-exp': role_req_exp,
|
43 |
+
'role_pos': role_pos,
|
44 |
+
'major_similarity': major_similarity,
|
45 |
+
'skill_similarity': skill_similarity,
|
46 |
+
'score': score
|
47 |
+
}]
|
48 |
+
X = pd.DataFrame.from_dict(data)
|
49 |
+
res = model.predict(X)
|
50 |
+
results['score'] = model.predict_proba(X)[:, 1]
|
51 |
+
results['is_accepted'] = np.argmax(res)
|
52 |
return results
|