def compute_distance(self, a, b): if a in self.intonationmap: # print " -hit a" adata = self.intonationmap[a] else: try: adata = util.docserver_get_json(a, "normalisedpitch", "normalisedhistogram") except util.NoFileException: print "can't find recording %s in docserver" % a return None self.intonationmap[a] = adata if b in self.intonationmap: # print " -hit b" bdata = self.intonationmap[b] else: try: bdata = util.docserver_get_json(b, "normalisedpitch", "normalisedhistogram") except util.NoFileException: print "can't find recording %s in docserver" % b return None self.intonationmap[b] = bdata if (a, b) in self.distancemap: # print " -hit d-ab" distance = self.distancemap[(a, b)] elif (b, a) in self.distancemap: # print " -hit d-ba" distance = self.distancemap[(b, a)] else: distance = recording.kldiv(adata, bdata) self.distancemap[(a, b)] = distance return distance
def compute_similarity(self, raag, raagprofile, otherraags, module): rid = raag.pk dirname = self.dirname % module try: os.makedirs(dirname) except OSError: pass sims = [] for oraag, oprofile in otherraags.items(): oid = oraag.pk if (rid, oid) in self.distancemap: # print " -hit d-ab" distance = self.distancemap[(rid, oid)] elif (oid, rid) in self.distancemap: # print " -hit d-ba" distance = self.distancemap[(oid, rid)] else: distance = recording.kldiv(raagprofile, oprofile) self.distancemap[(rid, oid)] = distance print("distance between %s-%s is %s" % (rid, oid, distance)) if distance: sims.append((oid, distance)) sims = [(i[0], round(i[1], 2)) for i in sims if not decimal.Decimal(i[1]).is_nan()] sims = sorted(sims, key=lambda a: a[1]) name = os.path.join(dirname, "%s.json" % rid) ret = {"rid": rid, "similar": sims} json.dump(ret, open(name, "wb"), indent=2)
def compute_similarity(self, raag, raagprofile, otherraags, module): rid = raag.pk dirname = self.dirname % module try: os.makedirs(dirname) except OSError: pass sims = [] for oraag, oprofile in otherraags.items(): oid = oraag.pk if (rid, oid) in self.distancemap: # print " -hit d-ab" distance = self.distancemap[(rid, oid)] elif (oid, rid) in self.distancemap: # print " -hit d-ba" distance = self.distancemap[(oid, rid)] else: distance = recording.kldiv(raagprofile, oprofile) self.distancemap[(rid, oid)] = distance print "distance between %s-%s is %s" % (rid, oid, distance) if distance: sims.append((oid, distance)) sims = [ (i[0], round(i[1], 2)) for i in sims if not decimal.Decimal(i[1]).is_nan() ] sims = sorted(sims, key=lambda a: a[1]) name = os.path.join(dirname, "%s.json" % rid) ret = {"rid": rid, "similar": sims} json.dump(ret, open(name, "wb"), indent=2)
def compute_distance(self, a, b): if a in self.intonationmap: # print " -hit a" adata = self.intonationmap[a] else: try: adata = util.docserver_get_json(a, "normalisedpitch", "normalisedhistogram") except util.NoFileException: print "can't find recording %s in docserver" % a self.intonationmap[a] = None return None self.intonationmap[a] = adata if b in self.intonationmap: # print " -hit b" bdata = self.intonationmap[b] else: try: bdata = util.docserver_get_json(b, "normalisedpitch", "normalisedhistogram") except util.NoFileException: print "can't find recording %s in docserver" % b return None self.intonationmap[b] = None self.intonationmap[b] = bdata if adata is None or bdata is None: return None if (a, b) in self.distancemap: # print " -hit d-ab" distance = self.distancemap[(a, b)] elif (b, a) in self.distancemap: # print " -hit d-ba" distance = self.distancemap[(b, a)] else: distance = recording.kldiv(adata, bdata) self.distancemap[(a, b)] = distance return distance