我实现了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 因为你专门处理字符串
- 1 回答
- 0 关注
- 142 浏览
添加回答
举报
0/150
提交
取消