#-*- coding: utf-8 -*-
from __future__ importdivisionfrom math importsqrtfrom dataloader importloadJsonObjectToDictimportpickleimportosimportjsonimportio
PENALTY_RATIO= 9
defsim_tanimoto(prefs, personA, personB):print "enter sim_tanimoto"keys_a=set(prefs[personA])
keys_b=set(prefs[personB])
intersection= keys_a &keys_b
unionDict= dict(prefs[personA], **prefs[personB])return len(intersection)/len(unionDict)defsim_euclid(prefs, personA, personB):print "enter sim_euclid"si= {} #Dict for shared item
for item inprefs[personA]:if item inprefs[personB]:
si[item]= 1
#Zero shared item -> not similar at all
if len(si) == 0: return0
sum_of_squares= sum([pow(prefs[personA][item] - prefs[personB][item], 2) for item insi])
r= 1/(1+sqrt(sum_of_squares))returnrdefsim_pearson(prefs, personA, personB):print "enter sim_pearson"si= {} #Dict for shared item
for item inprefs[personA]:if item inprefs[personB]:
si[item]= 1n=len(si)if n == 0: return0#sum
sumA = sum([prefs[personA][item] for item insi])
sumB= sum([prefs[personB][item] for item insi])#sum sqrt
sumASqrt = sum([pow(prefs[personA][item], 2) for item insi])
sumBSqrt= sum([pow(prefs[personB][item], 2) for item insi])#power of sum
pSum = sum(prefs[personA][it] * prefs[personB][it] for it insi)#pearson Formula 4
num = pSum - (sumA*sumB/n)
den= sqrt((sumASqrt - pow(sumA, 2)/n) * (sumBSqrt - pow(sumB, 2)/n))if den == 0: return0
r= num/denreturnr