为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
largeQ 2021-11-21 14:55:48
我实现了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);}}
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您需要提供所需的使用示例。据我了解,您会喜欢以下内容:


ArrayList targets = new ArrayList();

targets.Add("word1");

targets.Add("word2");

targets.Add("word3");

double distPercentage = JaroWinklerDistance.meanProximity("sourceWord", targets);

在这种情况下,您应该只迭代 ArrayList 元素并为每个转换为字符串的项目调用“.proximity”。


顺便说一句,最好使用


List<string> 

而不是 ArrayList 因为你专门处理字符串


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信