Esempio n. 1
0
        private void GetFingerprintSimilarity(IFingerprintCommand databaseSong, IFingerprintCommand querySong, SimilarityResult results)
        {
            double sum = 0;

            List <bool[]> fingerprintsDatabaseSong = databaseSong.Fingerprint()
                                                     .Result
                                                     .Select(fingerprint => fingerprint)
                                                     .ToList();
            List <bool[]> fingerprintsQuerySong = querySong.Fingerprint()
                                                  .Result
                                                  .Select(fingerprint => fingerprint)
                                                  .ToList();

            double max = double.MinValue;
            double min = double.MaxValue;
            int    comparisonsCount = 0;

            for (int i = 0; i < fingerprintsDatabaseSong.Count; i++)
            {
                for (int j = 0; j < fingerprintsQuerySong.Count; j++)
                {
                    double value = SimilarityUtility.CalculateJaccardSimilarity(fingerprintsDatabaseSong[i], fingerprintsQuerySong[j]);
                    if (value > max)
                    {
                        max = value;
                    }

                    if (value < min)
                    {
                        min = value;
                    }

                    sum += value;
                    comparisonsCount++;
                }
            }

            results.SumJaqSimilarityBetweenDatabaseAndQuerySong     += sum;
            results.AverageJaqSimilarityBetweenDatabaseAndQuerySong += sum / comparisonsCount;
            if (max > results.MaxJaqSimilarityBetweenDatabaseAndQuerySong)
            {
                results.MaxJaqSimilarityBetweenDatabaseAndQuerySong = max;
            }

            if (min < results.MinJaqSimilarityBetweenDatabaseAndQuerySong)
            {
                results.MinJaqSimilarityBetweenDatabaseAndQuerySong = min;
            }

            results.NumberOfAnalizedFingerprints = comparisonsCount;
        }
Esempio n. 2
0
        private void GetFingerprintSimilarity(IFingerprintCommand databaseSong, IFingerprintCommand querySong, SimilarityResult results)
        {
            double sum = 0;

            List<bool[]> fingerprintsDatabaseSong = databaseSong.Fingerprint()
                                                                .Result
                                                                .Select(fingerprint => fingerprint)
                                                                .ToList();
            List<bool[]> fingerprintsQuerySong = querySong.Fingerprint()
                                                                .Result
                                                                .Select(fingerprint => fingerprint)
                                                                .ToList();

            double max = double.MinValue;
            double min = double.MaxValue;
            int comparisonsCount = 0;
            for (int i = 0; i < fingerprintsDatabaseSong.Count; i++)
            {
                for (int j = 0; j < fingerprintsQuerySong.Count; j++)
                {
                    double value = SimilarityUtility.CalculateJaccardSimilarity(fingerprintsDatabaseSong[i], fingerprintsQuerySong[j]);
                    if (value > max)
                    {
                        max = value;
                    }

                    if (value < min)
                    {
                        min = value;
                    }

                    sum += value;
                    comparisonsCount++;
                }
            }

            results.SumJaqSimilarityBetweenDatabaseAndQuerySong += sum;
            results.AverageJaqSimilarityBetweenDatabaseAndQuerySong += sum / comparisonsCount;
            if (max > results.MaxJaqSimilarityBetweenDatabaseAndQuerySong)
            {
                results.MaxJaqSimilarityBetweenDatabaseAndQuerySong = max;
            }

            if (min < results.MinJaqSimilarityBetweenDatabaseAndQuerySong)
            {
                results.MinJaqSimilarityBetweenDatabaseAndQuerySong = min;
            }

            results.NumberOfAnalizedFingerprints = comparisonsCount;
        }