def build_precision(muti): precision={} precisionold={} voisinages_pos={} voisinages={} muti_pos = {} for x, y in muti.iteritems(): if y>0: muti_pos[x]=y temp=voisinages_pos.get((x[0],x[2]),[]) temp.append(x[1]) voisinages_pos[(x[0],x[2])]=temp print "voisinages_pos ecrite" muti=muti_pos compt=0 N=len(voisinages_pos.keys()) muti2d = convert_muti3d_muti2d(muti) print 'matrice d information mutuelle 2d calculée' for element1,contextes in voisinages_pos.iteritems(): terme1 = element1[0] inter = int(element1[1]) compt+=1 if not compt%100: print '(#'+str(compt)+" sur "+str(N) +")" MI_terme1 = muti2d[(terme1,inter)] denom = sum(MI_terme1.values()) for cont,val in MI_terme1.iteritems(): if cont != terme1: MI_terme2 = muti2d[(cont,inter)] somme_min = fonctions_lib.merge0(MI_terme1, MI_terme2, lambda x,y: min(x,y)) precision[(cont,terme1,inter)] = sum(somme_min.values())/denom print 'matrice de precision calculée' return precision
def build_precision(muti): precision={} precisionold={} voisinages_pos={} voisinages={} muti_pos = {} # for x,y in muti.iteritems(): # if y>0: # muti_pos[x]=y # temp=voisinages_pos.get((x[0],x[2]),[]) # temp.append(x[1]) # voisinages_pos[(x[0],x[2])]=temp # print "voisinages_pos ecrite" # muti=muti_pos # compt=0 # N=len(voisinages_pos.keys()) # muti2d = convert_muti3d_muti2d(muti) # print 'matrice d information mutuelle 2d calculée' #for element1,contextes in voisinages_pos.iteritems(): compt=0 N=len(muti.keys()) for terme1,muti_terme1 in muti.iteritems(): compt+=1 if not compt%100: print '(#'+str(compt)+" sur "+str(N) +")" denom = sum(muti_terme1.values()) for terme2 in muti_terme1.keys():#on itere donc sur les termes2 qui ont cooccuré au moins deux fois avec terme1 muti_terme2 = muti[terme2] somme_min = fonctions_lib.merge0(muti_terme1, muti_terme2, lambda x,y: min(x,y)) precision[(terme1,terme2)] = sum(somme_min.values())/denom # # # terme1 = element1[0] # inter = int(element1[1]) # MI_terme1 = muti2d[(terme1,inter)] # denom = sum(MI_terme1.values()) # for cont,val in MI_terme1.iteritems(): # if cont != terme1: # MI_terme2 = muti2d[(cont,inter)] # somme_min = fonctions_lib.merge0(MI_terme1, MI_terme2, lambda x,y: min(x,y)) # precision[(cont,terme1,inter)] = sum(somme_min.values())/denom print 'matrice de precision calculée' return precision