Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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();
 }