如何为字符串相似度算法实现数组列表输入?

我实现了jarowinkler算法。在该算法中,我采用了字符串源和字符串目标。字符串目标作为输入字符串源作为数组,如 source[0]。如何将jarowinkler算法实现为数组列表输入?请看下面的代码


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


}

}


largeQ
浏览 143回答 1
1回答

吃鸡游戏

您需要提供所需的使用示例。据我了解,您会喜欢以下内容:ArrayList targets = new ArrayList();targets.Add("word1");targets.Add("word2");targets.Add("word3");double distPercentage = JaroWinklerDistance.meanProximity("sourceWord", targets);在这种情况下,您应该只迭代 ArrayList 元素并为每个转换为字符串的项目调用“.proximity”。顺便说一句,最好使用List<string>&nbsp;而不是 ArrayList 因为你专门处理字符串
打开App,查看更多内容
随时随地看视频慕课网APP