0

I implemented jarowinkler algorithm. In that algorithm I have taken string source and string target. String target taking as input string source taking as array like source[0]. How can implement jarowinkler algorithm as array list input? Please see below code

public static class JaroWinklerDistance
{
private static readonly double mWeightThreshold = 0.7;

private static readonly int mNumChars = 4;



public static double distance(string source, string target)
{
    return 1.0 - proximity(source, target);
}


public static double proximity(string aString1, string aString2)
{
    int lLen1 = aString1.Length;
    int lLen2 = aString2.Length;
    if (lLen1 == 0)
        return lLen2 == 0 ? 1.0 : 0.0;

    int lSearchRange = Math.Max(0, Math.Max(lLen1, lLen2) / 2 - 1);

    bool[] lMatched1 = new bool[lLen1];
    bool[] lMatched2 = new bool[lLen2];

    int lNumCommon = 0;
    for (int i = 0; i < lLen1; ++i)
    {
        int lStart = Math.Max(0, i - lSearchRange);
        int lEnd = Math.Min(i + lSearchRange + 1, lLen2);
        for (int j = lStart; j < lEnd; ++j)
        {
            if (lMatched2[j]) continue;
            if (aString1[i] != aString2[j])
                continue;
            lMatched1[i] = true;
            lMatched2[j] = true;
            ++lNumCommon;
            break;
        }
    }
    if (lNumCommon == 0) return 0.0;

    int lNumHalfTransposed = 0;
    int k = 0;
    for (int i = 0; i < lLen1; ++i)
    {
        if (!lMatched1[i]) continue;
        while (!lMatched2[k]) ++k;
        if (aString1[i] != aString2[k])
            ++lNumHalfTransposed;
        ++k;
    }
    int lNumTransposed = lNumHalfTransposed / 2;
  double lNumCommonD = lNumCommon;
    double lWeight = (lNumCommonD / lLen1
                     + lNumCommonD / lLen2
                     + (lNumCommon - lNumTransposed) / lNumCommonD) / 3.0;

    if (lWeight <= mWeightThreshold) return lWeight;
    int lMax = Math.Min(mNumChars, Math.Min(aString1.Length, aString2.Length));
    int lPos = 0;
    while (lPos < lMax && aString1[lPos] == aString2[lPos])
        ++lPos;
    if (lPos == 0) return lWeight;
    return lWeight + 0.1 * lPos * (1.0 - lWeight);

}

}

The above code is static class need to implement as array list for that class. Array list must compare as per jaro winkler algorithm. The below code I posting my main class.

 class Program
{

    static void Main(string[] args)
    {
        string target;
        string[] source1 = new string[]
            {
                "xyz technology solutions"
            };


        while (true)
        {

            Console.Write("Please enter target string: ");
            target = Console.ReadLine();
            numbersInput.Add(target);


            Console.WriteLine("jarowinkler::{0}%", JaroWinklerDistance.proximity(source1[0].ToLower(), target.ToLower()) * 100);



        }
    }
}}

so i need to implement array list for this code take input from arraylist. Split that list to words. Words compare must compare source and target then it give matching percentage.

2
  • Please go into further detail on what you tried, where you got stuck and what exactly causes you problems. Also 'I implemented' is a very fancy way of saying 'i copied' the Jaro-Winkler algorithm from probably here. Commented Aug 9, 2018 at 8:33
  • Milster i seen abovelink u posted. but it is implemented as above posted code. iam asking about how to implement array list for above code. how to compare with jarowinkler those arraylist source and target. Commented Aug 9, 2018 at 8:45

1 Answer 1

0

You need to provide desired usage example. From what I understood You would like something like:

ArrayList targets = new ArrayList();
targets.Add("word1");
targets.Add("word2");
targets.Add("word3");
double distPercentage = JaroWinklerDistance.meanProximity("sourceWord", targets);

In this case You should just iterate over ArrayList elements and call ".proximity" for each item transformed into string.

By the way, it's better to use

List<string> 

instead of ArrayList because You are dealing specifically with strings

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.