Ejemplo n.º 1
0
        private List<String> GetSimilaresDatabaseKmeans(List<Double> descriptoresEntrada)
        {
            ModeloSimilitudEntities db = new ModeloSimilitudEntities();
            List<canciones> ListaCanciones = db.canciones.ToList();
            Double[] vectorEntrada = descriptoresEntrada.ToArray();
            vectorEntrada = Normalizar(vectorEntrada);
            Double[][] matriz = csvtoMatrix("descriptoresNormalizados");
            int Nclusters = 7;
            KMeans kmeans = new KMeans(Nclusters, Accord.Math.Distance.Chebyshev);
            int[] indices = kmeans.Compute(matriz);
            int Cluster =kmeans.Nearest(vectorEntrada);

            int nroSimilares = 10;
            int[] indiceSimilar=new int[nroSimilares];

            for(int j=0;j<nroSimilares;j++){
                Double distancia = 1000;
                for (int i = 0; i < indices.Length; i++)
                {
                    if (!indiceSimilar.Contains(i))
                    {
                        if (Cluster == indices[i])
                        {
                            Double distanciatemp = Accord.Math.Distance.Chebyshev(vectorEntrada, matriz[i]);
                            if (distanciatemp < distancia)
                            {
                                distancia = distanciatemp;
                                indiceSimilar[j] = i;
                            }
                        }
                    }
                }
            }

            List<String> listaSimilares = new List<String>();
            foreach (int i in indiceSimilar)
            {
                listaSimilares.Add(ListaCanciones[i].id_spotify.Substring(14));
            }

            //string select="select * from canciones where energy={0} and liveness={1} and tempo={2} and speechiness={3} and acousticness={4} and loudness={5} and valence={6} and danceability={7} and instrumentalness={8} and key={9}";
            //string select2 = "select * from canciones";
            //for(int j=0;j<cercanos.Length;j++){
            //    object[] parameters = new object[10];
            //    for (int i = 0; i < 10; i++)
            //    {
            //            SqlParameter param = new SqlParameter("i", cercanos[j][i]);
            //            parameters[i] = cercanos[j][i];
            //        }
            //        var stores = db.Database.SqlQuery<canciones>(select, parameters).ToList();
            //        listaSimilares.Add(stores[0].id_spotify);
            //}

            return listaSimilares;
        }