-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathevaluateTypes.py
More file actions
70 lines (57 loc) · 2.21 KB
/
evaluateTypes.py
File metadata and controls
70 lines (57 loc) · 2.21 KB
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
import sys
import json
import pymongo
from scipy import spatial
def loginMongo():
fileKeys = open('adressMongo.json').read()
keys = json.loads(fileKeys)
client = pymongo.MongoClient(keys['adress_local'],int(keys['port_local']))
return client[keys['name_db']]
def getCentroid(db, id_experiment):
centroid = db['centroid'].find_one({'id_experiment':id_experiment, 'type':'type'},{'centroid':1, '_id':0})['centroid']
return centroid
def getCandidates(db, id_experiment):
result = db['users'].find({'id_experiment':id_experiment, 'type':'candidates'},{'features':1, 'screen_name':1})
candidates =[]
for cand in result:
candidates.append(cand)
return candidates
def evaluateCandidate(centroid, user_features):
vect_centroid = []
vect_user = []
if len(user_features) == 0:
return 0
for i in centroid:
vect_centroid.append(centroid[i])
if i in user_features:
vect_user.append(user_features[i])
user_features.pop(i)
else:
vect_user.append(0)
for f in user_features:
vect_centroid.append(0)
vect_user.append(user_features[f])
score = 1 - spatial.distance.cosine(vect_centroid, vect_user)
return score
#def storeScore(cursor, id_experiment, screen_name, score):
# print(screen_name, id_experiment, score)
# command = ("UPDATE candidates SET score="+str(score)+" WHERE id_experiment="+id_experiment+" AND screen_name='"+screen_name+"'")
# cursor.execute(command)
def storeScore(db, id_experiment, screen_name, score):
db['users'].update({'id_experiment':id_experiment, 'screen_name':screen_name},{'$set':{'score_types':score}})
def main():
# do the mongo login
try:
dbMongo = loginMongo()
except:
print('error login Mongo')
id_experiment = sys.argv[1:][0]
centroid = getCentroid(dbMongo, id_experiment)
list_candidates = getCandidates(dbMongo, id_experiment)
for candidate in list_candidates:
screen_name = candidate['screen_name']
features = candidate['features']
score = evaluateCandidate(centroid, features)
storeScore(dbMongo, id_experiment, screen_name, score)
if __name__ == "__main__":
main()