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); }
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); }