public static double ApproximatelyEquals(this string firstWord, string secondWord, SimMetricType simMetricType = SimMetricType.Levenstein) { switch (simMetricType) { case SimMetricType.BlockDistance: var sim2 = new BlockDistance(); return(sim2.GetSimilarity(firstWord, secondWord)); case SimMetricType.ChapmanLengthDeviation: var sim3 = new ChapmanLengthDeviation(); return(sim3.GetSimilarity(firstWord, secondWord)); case SimMetricType.CosineSimilarity: var sim4 = new CosineSimilarity(); return(sim4.GetSimilarity(firstWord, secondWord)); case SimMetricType.DiceSimilarity: var sim5 = new DiceSimilarity(); return(sim5.GetSimilarity(firstWord, secondWord)); case SimMetricType.EuclideanDistance: var sim6 = new EuclideanDistance(); return(sim6.GetSimilarity(firstWord, secondWord)); case SimMetricType.JaccardSimilarity: var sim7 = new JaccardSimilarity(); return(sim7.GetSimilarity(firstWord, secondWord)); case SimMetricType.Jaro: var sim8 = new Jaro(); return(sim8.GetSimilarity(firstWord, secondWord)); case SimMetricType.JaroWinkler: var sim9 = new JaroWinkler(); return(sim9.GetSimilarity(firstWord, secondWord)); case SimMetricType.MatchingCoefficient: var sim10 = new MatchingCoefficient(); return(sim10.GetSimilarity(firstWord, secondWord)); case SimMetricType.MongeElkan: var sim11 = new MongeElkan(); return(sim11.GetSimilarity(firstWord, secondWord)); case SimMetricType.NeedlemanWunch: var sim12 = new NeedlemanWunch(); return(sim12.GetSimilarity(firstWord, secondWord)); case SimMetricType.OverlapCoefficient: var sim13 = new OverlapCoefficient(); return(sim13.GetSimilarity(firstWord, secondWord)); case SimMetricType.QGramsDistance: var sim14 = new QGramsDistance(); return(sim14.GetSimilarity(firstWord, secondWord)); case SimMetricType.SmithWaterman: var sim15 = new SmithWaterman(); return(sim15.GetSimilarity(firstWord, secondWord)); case SimMetricType.SmithWatermanGotoh: var sim16 = new SmithWatermanGotoh(); return(sim16.GetSimilarity(firstWord, secondWord)); case SimMetricType.SmithWatermanGotohWindowedAffine: var sim17 = new SmithWatermanGotohWindowedAffine(); return(sim17.GetSimilarity(firstWord, secondWord)); case SimMetricType.ChapmanMeanLength: var sim18 = new ChapmanMeanLength(); return(sim18.GetSimilarity(firstWord, secondWord)); default: var sim1 = new Levenstein(); return(sim1.GetSimilarity(firstWord, secondWord)); } }
public static int GetMinTravelAptBlock(List <Block> blocks, List <string> requirements) { blockDistances = new List <BlockDistance>(); //forward pass for (int i = 0; i < blocks.Count; i++) { var blockDistance = new BlockDistance() { BlockId = i, Gym = int.MaxValue, School = int.MaxValue, Office = int.MaxValue, Store = int.MaxValue, MaxTravel = int.MaxValue }; if (blocks[i].Gym) { blockDistance.Gym = 0; } else if (i > 0 && blockDistances[i - 1].Gym != int.MaxValue) { blockDistance.Gym = Math.Min(blockDistances[i - 1].Gym + 1, blockDistance.Gym); } if (blocks[i].School) { blockDistance.School = 0; } else if (i > 0 && blockDistances[i - 1].School != int.MaxValue) { blockDistance.School = Math.Min(blockDistances[i - 1].School + 1, blockDistance.School); } if (blocks[i].Office) { blockDistance.Office = 0; } else if (i > 0 && blockDistances[i - 1].Office != int.MaxValue) { blockDistance.Office = Math.Min(blockDistances[i - 1].Office + 1, blockDistance.Office); } if (blocks[i].Store) { blockDistance.Store = 0; } else if (i > 0 && blockDistances[i - 1].Store != int.MaxValue) { blockDistance.Store = Math.Min(blockDistances[i - 1].Store + 1, blockDistance.Store); } blockDistance.MaxTravel = MaxOfValues(new int[] { blockDistance.Gym, blockDistance.School, blockDistance.Office, blockDistance.Store }); blockDistances.Add(blockDistance); } //backward pass for (int i = blocks.Count - 1; i >= 0; i--) { var blockDistance = blockDistances[i]; if (blocks[i].Gym) { blockDistance.Gym = 0; } else if (i < blocks.Count - 1 && blockDistances[i + 1].Gym != int.MaxValue) { blockDistance.Gym = Math.Min(blockDistances[i + 1].Gym + 1, blockDistance.Gym); } if (blocks[i].School) { blockDistance.School = 0; } else if (i < blocks.Count - 1 && blockDistances[i + 1].School != int.MaxValue) { blockDistance.School = Math.Min(blockDistances[i + 1].School + 1, blockDistance.School); } if (blocks[i].Office) { blockDistance.Office = 0; } else if (i < blocks.Count - 1 && blockDistances[i + 1].Office != int.MaxValue) { blockDistance.Office = Math.Min(blockDistances[i + 1].Office + 1, blockDistance.Office); } if (blocks[i].Store) { blockDistance.Store = 0; } else if (i < blocks.Count - 1 && blockDistances[i + 1].Store != int.MaxValue) { blockDistance.Store = Math.Min(blockDistances[i + 1].Store + 1, blockDistance.Store); } blockDistance.MaxTravel = MaxOfValues(new int[] { blockDistance.Gym, blockDistance.School, blockDistance.Office, blockDistance.Store }); } Array.Sort(blockDistances.Select(b => b.MaxTravel).ToArray()); return(blockDistances[0].BlockId); }
public double GetSimilarity(string str1, string str2, string type) { IStringMetric stringMetric; switch (type) { case AlgorithmTypes.BlockDistance: stringMetric = new BlockDistance(); break; case AlgorithmTypes.ChapmanLengthDeviation: stringMetric = new ChapmanLengthDeviation(); break; case AlgorithmTypes.ChapmanMeanLength: stringMetric = new ChapmanMeanLength(); break; case AlgorithmTypes.CosineSimilarity: stringMetric = new CosineSimilarity(); break; case AlgorithmTypes.DiceSimilarity: stringMetric = new DiceSimilarity(); break; case AlgorithmTypes.EuclideanDistance: stringMetric = new EuclideanDistance(); break; case AlgorithmTypes.JaccardSimilarity: stringMetric = new JaccardSimilarity(); break; case AlgorithmTypes.Jaro: stringMetric = new Jaro(); break; case AlgorithmTypes.JaroWinkler: stringMetric = new JaroWinkler(); break; case AlgorithmTypes.Levenstein: stringMetric = new Levenstein(); break; case AlgorithmTypes.MatchingCoefficient: stringMetric = new MatchingCoefficient(); break; case AlgorithmTypes.MongeElkan: stringMetric = new MongeElkan(); break; case AlgorithmTypes.NeedlemanWunch: stringMetric = new NeedlemanWunch(); break; case AlgorithmTypes.OverlapCoefficient: stringMetric = new OverlapCoefficient(); break; case AlgorithmTypes.QGramsDistance: stringMetric = new QGramsDistance(); break; case AlgorithmTypes.SmithWaterman: stringMetric = new SmithWaterman(); break; case AlgorithmTypes.SmithWatermanGotoh: stringMetric = new SmithWatermanGotoh(); break; case AlgorithmTypes.SmithWatermanGotohWindowedAffine: stringMetric = new SmithWatermanGotohWindowedAffine(); break; default: stringMetric = new SmithWatermanGotoh(); break; } var similarity = stringMetric.GetSimilarity(str1.Trim(), str2.Trim()); return(similarity); }
// [SetUp] public BlockDistanceUnitTests() { LoadData(); myBlockDistance = new BlockDistance(); }