public static void testLSHV(string listname, string qlist, int Q, int S) { int porcen=0; int numconsult=0; Console.WriteLine("<-- Building LSH Multiple Tables -->"); string indexName = string.Format("Index.LSC.Prueba.xml"); HammingMLSC I; if (!File.Exists(indexName)) { I = new HammingMLSC(); I.SeqBuilder = SequenceBuilders.GetSeqXLB_SArray64 (16); if (! (File.Exists(listname + ".header"))) { var A = new AudioSpace(); A.Build(listname, 30*3, 3); } I.Build(indexName,"audio-space",listname,20,1); } I = IndexLoader.Load(indexName) as HammingMLSC; Console.WriteLine("<-- Searching first object -->"); var aspace = (AudioSpace)I.MainSpace; Chronos tiempo = new Chronos(); foreach (var qname in (new QueryStream(qlist)).Iterate()) { numconsult++; Console.WriteLine ("<<<--- Inizializing query --->>>"); tiempo.Start(); var R = SearchAudio (qname, aspace,I); tiempo.End(); if(R.Count>0){ porcen++; } Console.WriteLine ("qname: {0}",qname.QRaw); tiempo.PrintStats("****Tiempo de consulta****"); var qext = BinaryHammingSpace.ParseAndLoadFromFile(qname.QRaw,false); foreach ( var p in R){ Console.WriteLine ("docid: {0}, dist: {1}, name: {2}",p.docid, p.dist, aspace.GetNameFromDocId(p.docid)); var audio = aspace.GetAudio(p.docid); var distanciaHamming = BinaryHammingSpace.DistMinHamming(audio,qext,aspace.SymbolSize); Console.WriteLine ("***********DocId: {0}, Distancia BinaryHamming: {1}***************",p.docid, distanciaHamming); Console.WriteLine ("***********Error: {0}%",distanciaHamming/(qext.Count/aspace.SymbolSize * 24)*100); } Console.WriteLine ("<<<--- Finalizing query --->>>"); } Console.WriteLine("Porcentaje de respuesta: {0}%",porcen*100/numconsult); }
public static IResult SearchAudio(CommandQuery qname,AudioSpace aspace,HammingMLSC I) { ResultTies Respuesta = new ResultTies(candidatos,false); var Rfull = new ResultTies(100,false); List<IResult> res_list = new List<IResult>(); var qext = BinaryHammingSpace.ParseAndLoadFromFile(qname.QRaw,false); foreach(var idx in I.Indexes){ Console.WriteLine("XXXXXX: {0}",qname.QRaw); int numqgrams = (qext.Count - aspace.Q) / aspace.SymbolSize; double probabilidad = 0.05; var acc = new Dictionary<int, double>(); Rfull = Search1(qext,acc,numqgrams,idx,probabilidad); res_list.Add(Rfull); int count=0; double panterior = -1; foreach(var p in Rfull){ if(count > 0){ if(p.dist - panterior > 10){ break; } } count++; panterior = p.dist; } if(count < 10){ foreach(var p in Rfull){ Respuesta.Push(p.docid,p.dist); count--; if(count==0) return Respuesta; } } } return Respuesta; //Eliminar esto para que todo quede normal if(Respuesta.Count==0){ Dictionary<int,double> rcc = new Dictionary<int,double>(); foreach(var rl in res_list){ double dist; foreach(var respair in rl){ if(!rcc.TryGetValue(respair.docid,out dist)){ rcc[respair.docid] = -1; } else{ rcc[respair.docid]--; } } } Rfull = new ResultTies(100,false); foreach(var pair in rcc){ Rfull.Push(pair.Key,pair.Value); } var RFinal = new Result(100, false); foreach (var pair in Rfull){ var audio = aspace.GetAudio (pair.docid); var dist = BinaryHammingSpace.DistMinHamming (audio, qext,aspace.SymbolSize); RFinal.Push (pair.docid, dist); } var error = (qext.Count/aspace.SymbolSize * 24) * perror; //Console.WriteLine ("Error: {0}",error); foreach(var p in RFinal){ if(p.dist < error){ Respuesta.Push(p.docid,p.dist); } else{ break; } } } return Respuesta; }