public static FileInfo GetAssociatedJsonFile(
            string groupIndex,
            string mp4FileName,
            out int matchedDistance)
        {
            var groupIndexDirectory = new DirectoryInfo(
                _baseDirectory.FullName + $@"\{groupIndex}\");

            var decodedFileName = mp4FileName.UrlDecode();

            var distances = groupIndexDirectory
                            .GetFiles("*.json")
                            .Select(
                t => (
                    distance: StringDistanceAlgorithms
                    .LevenshteinDistance(
                        t.Name.Replace(".mp4", ".json", true, CultureInfo.CurrentCulture),
                        decodedFileName), jsonFile: t))
                            .OrderBy(t => t.distance)
                            .ToArray();

            var jsonFile = distances.First();

            matchedDistance = jsonFile.distance;
            return(jsonFile.jsonFile);
        }
示例#2
0
        private static double GetDifference(string word1, string word2, StringDistanceAlgorithm algorithm, bool exportAsSimilarity, KashefiConfig kashefiConfig)
        {
            double distance = -1;

            StringDistanceAlgorithms.ExportResultAsSimilarity = exportAsSimilarity;

            if (algorithm == StringDistanceAlgorithm.Hamming)
            {
                distance = StringDistanceAlgorithms.Hamming(word1, word2);
            }
            else if (algorithm == StringDistanceAlgorithm.Levenestain)
            {
                distance = StringDistanceAlgorithms.Levenstein(word1, word2);
            }
            else if (algorithm == StringDistanceAlgorithm.GNULevenesain)
            {
                distance = StringDistanceAlgorithms.GNULevenstein(word1, word2);
            }
            else if (algorithm == StringDistanceAlgorithm.Kashefi)
            {
                distance = StringDistanceAlgorithms.KashefiMeasure(word1, word2, kashefiConfig);
            }
            else if (algorithm == StringDistanceAlgorithm.Needleman)
            {
                double          nGapCost = (kashefiConfig.DeleteGapCost + kashefiConfig.InsertGapCost) / 2.0;
                NeedlemanConfig nc       = new NeedlemanConfig(kashefiConfig.Keyboard, nGapCost, kashefiConfig.SubstituteGapCost);

                distance = StringDistanceAlgorithms.NeedlemanWunch(word1, word2, nc);
            }
            else if (algorithm == StringDistanceAlgorithm.JaroWinkler)
            {
                distance = StringDistanceAlgorithms.JaroWinckler(word1, word2);
            }
            else if (algorithm == StringDistanceAlgorithm.Cosine)
            {
                distance = StringDistanceAlgorithms.Cosine(word1, word2);
            }
            else if (algorithm == StringDistanceAlgorithm.DamerauLevenestain)
            {
                distance = StringDistanceAlgorithms.DamerauLevenstein(word1, word2);
            }
            else if (algorithm == StringDistanceAlgorithm.WagnerFischer)
            {
                distance = StringDistanceAlgorithms.WagnerFischer(word1, word2);
            }

            return(distance);
        }