- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 C# 中实现 Jaro-Winkler 距离字符串比较算法?
最佳答案
public static class JaroWinklerDistance
{
/* The Winkler modification will not be applied unless the
* percent match was at or above the mWeightThreshold percent
* without the modification.
* Winkler's paper used a default value of 0.7
*/
private static readonly double mWeightThreshold = 0.7;
/* Size of the prefix to be concidered by the Winkler modification.
* Winkler's paper used a default value of 4
*/
private static readonly int mNumChars = 4;
/// <summary>
/// Returns the Jaro-Winkler distance between the specified
/// strings. The distance is symmetric and will fall in the
/// range 0 (perfect match) to 1 (no match).
/// </summary>
/// <param name="aString1">First String</param>
/// <param name="aString2">Second String</param>
/// <returns></returns>
public static double distance(string aString1, string aString2) {
return 1.0 - proximity(aString1,aString2);
}
/// <summary>
/// Returns the Jaro-Winkler distance between the specified
/// strings. The distance is symmetric and will fall in the
/// range 0 (no match) to 1 (perfect match).
/// </summary>
/// <param name="aString1">First String</param>
/// <param name="aString2">Second String</param>
/// <returns></returns>
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);
// default initialized to false
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;
}
// System.Diagnostics.Debug.WriteLine("numHalfTransposed=" + numHalfTransposed);
int lNumTransposed = lNumHalfTransposed/2;
// System.Diagnostics.Debug.WriteLine("numCommon=" + numCommon + " numTransposed=" + numTransposed);
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);
}
}
关于string - C# 中的 Jaro–Winkler 距离算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19123506/
我有两列的数据框。第一个是正确的字符串,第二个是损坏的。我想应用 Jaro-Winkler 距离并将其存储在新的第三列中。 import pandas as pd from pyjarowinkler
我想知道如何以这种方式运行 SQLite 订单 select * from contacts order by jarowinkler(contacts.name,'john smith'); 我知道
我有从 this 中获取的 Jaro-Winkler 算法代码网站。我需要运行 150,000 次才能获得差异之间的距离。这需要很长时间,因为我在 Android 移动设备上运行。 能不能再优化一下?
我正在做一个应用程序,该应用程序可以计算大量品牌/域并检测来自预先确定的关键字的变体。 例子: facebook vs facebo0k.com linkedIn vs linkedln.com st
是否有 Jaro-Winkler 的实现SAS 中的字符串比较? 看起来像Link King有 Jaro-Winkler,但我更喜欢自己调用该函数的灵 active 。 谢谢! 最佳答案 据我所知,没
如何在 C# 中实现 Jaro-Winkler 距离字符串比较算法? 最佳答案 public static class JaroWinklerDistance { /* The Winkler
为了计算两个字符串的 Jaro 距离,我们使用这个等式: dj = 1/3 (m/|s1| + m/|s2| + (m-t)/m) 我应该如何计算这个等式中两个字符串的“m”? 如果“m”是两个字符串
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
从多个方面来说,我是新来的。关于我第一次尝试熟悉任何编程语言的第一个脚本的第一篇文章。鉴于此,您可能会发现这个项目过于雄心勃勃,但是,嘿,边做边学一直是必经之路。我正在尽力满足这里的 stackove
我一直在尝试使用 Sim-metrics 库: com.github.mpkorstanje simmetrics-core 4.1.0
几个月来我一直在想如何在 Transact SQL 中实现这个算法,https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance 如何实现?
我正在寻找方法来提高字符串匹配(相似性)中 TF-IDF 权重方案的准确性。主要问题是 TF-IDF 对 stings 中的打印错误很敏感,而且大多数大型数据集往往有错别字。 我意识到编辑距离的变体(
我正在使用 jaro-winkler 模糊匹配来匹配名称。 我正在尝试确定相似性分数的截止范围。如果名称差异太大,我想将它们排除在外以供人工审核。 虽然 .4 以下的名称似乎完全不同,但 .4 范围似
我需要对大量字符串进行模糊比较,正在查看 Jaro-Winkler这尊重字母顺序的差异。有没有人知道使用 Jaro-Winkler 或 IOS 原生方法在 Objective-C 或 Swift 中执
我现在正在做一些文本分析,作为其中的一部分,我需要获得特定列表中所有单词之间的 Jaro 距离矩阵(成对距离矩阵),如下所示: │CHEESE CHORES GEESE GLOVES
我正在尝试找到一种可靠的方法来匹配数据库中的重复人员记录。数据存在一些严重的数据质量问题,我也在尝试解决这些问题,但在我得到批准之前,我一直坚持我所拥有的数据。 我可以使用的表格列是: SURNAME
我是一名优秀的程序员,十分优秀!