-
Notifications
You must be signed in to change notification settings - Fork 1
/
RecruiterBot.py
173 lines (149 loc) · 4.66 KB
/
RecruiterBot.py
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
from PdfExtractor import *
from progress import *
from textblob import TextBlob
from flask import Flask,render_template
import os
import time
path = "/home/nk17kumar/sampleResumes/"
class Response:
def __init__(self, score, txt):
self.score = score
self.txt = txt
class Recruiter:
arr = ['c++','java','python','html','database','leadership','communication']
pool = {}
preposition = ['a','the','of','in','and','i','have','also','but']
@staticmethod
def fetchTechSkills(resume):
skillSet = ["c++","java","python","html","database"]
words = resume.rstrip().split(' ')
skills = []
for skill in skillSet:
for w in words:
tmp = w.lower()
tmp = tmp.rstrip('\n')
# print "word : " + tmp
if tmp == skill:
skills.append(tmp)
return skills
@staticmethod
def buildPool(lang):
fin = open(str(lang)+"res.txt")
arr = fin.readlines()
a = []
for elem in arr:
tmp = elem.split(',')
e = Response(tmp[0],tmp[1])
a.append(e)
Recruiter.pool[lang] = a
@staticmethod
def getScore(resume,skills):
words = resume.rstrip().split(' ')
# words.append("hello@")
# print words
score_card = {}
# for all skill in the skillset
for skill in skills:
# h = words.index(skill)
score_card[skill] = 1.5
l = 0
r = len(words)
cnt=0
score=0.0
# for all words in the resume
for i in range(l,r):
tmp = words[i]
f = True
#checking if it is preposition
for elem in Recruiter.preposition:
if elem == tmp:
f = False
#if not prepositon
if f:
# checking if current skill is in pool
if skill in Recruiter.pool:
# for all data for this skill
for s in Recruiter.pool[skill]:
arr = s.txt.rstrip().split(' ')
f1 = True
try:
if arr.index(tmp) >= 0:
cnt+=1
print "comming here"
score+=float(s.score)
except:
cnt+=0
if cnt != 0:
print "filling here"
score_card[skill] = max(score_card[skill],score/cnt)
for skill in Recruiter.arr:
if(score_card.has_key(skill) != 1):
score_card[skill] = 0
return score_card
@staticmethod
def train():
for s in Recruiter.arr:
Recruiter.buildPool(s)
@staticmethod
def getFileNames():
filenames = os.listdir(path)
return filenames
# steps for one single getResume
@staticmethod
def procedure(filename):
# Step 1 : extract text from Pdf
txt = PdfExtractor.getResumeText(filename)
# Step 2 : fetch tech skills
skills = Recruiter.fetchTechSkills(txt)
skills.append("leadership")
skills.append("communication")
# Step 3: assign score
score = Recruiter.getScore(txt,skills)
return score
@staticmethod
def eval():
Recruiter.train()
#final scorecard
scorecard = {}
# Step 1 : get all pdfs
pdfs = Recruiter.getFileNames()
# Step 2 : pass each pdf to procedure
for i in range(0,len(pdfs)):
t = path+str(pdfs[i])
# Step 3 : append each json to list
scorecard[str(pdfs[i])] = Recruiter.procedure(t)
return scorecard
# print Recruiter.getFileNames()
# sz = len(arr)
# print sz
#
# print "Initializing the recruiter bot\n"
#
# Recruiter.train()
#
# total = 6
# i = 0
# while i <= total:
# progress(i, total, status='Training on dataset for '+Recruiter.arr[i]+'\n')
# time.sleep(0.1) # emulating long-playing job
# i += 1
# print '\n'
#
# resume = raw_input("enter the resume file location : ")
# print "\n"
# txt = PdfExtractor.getResumeText(resume)
# print txt
# total = 3
# i = 0
# while i <= total:
# progress(i, total, status='Extracting Text\n')
# time.sleep(0.1) # emulating long-playing job
# i += 1
# print '\n'
#
# skills = Recruiter.fetchTechSkills(txt)
# print "found skills : " + str(skills)
# skills.append("leadership")
# skills.append("communication")
#
# print Recruiter.getScore(txt,skills)