是否有可能在Excel中执行Levenshtein距离而不必求助于macros?

让我解释。

我必须为公司做一些模糊匹配,所以ATM我使用levenshtein距离计算器,然后计算这两个词之间的相似百分比。 如果条件超过80%,Fuzzymatch返回“TRUE”。

我的问题是我正在实习,很快就要离开了。 那些将继续这样做的人不知道如何使用excel与macros,并要求我尽我所能去实现我所做的。

所以我的问题是:然而,这个函数可能是低效率的,有没有办法在Excel中做一个标准的函数来计算我之前做的,而不是使用macros?

谢谢。

虽然不能在任何合理大小的string的单个公式中完成,但您可以使用公式单独使用工作表计算string之间的Levenshtein距离。

这里是一个可以处理15个字符的string的例子,它可以很容易地扩展为更多:

https://docs.google.com/spreadsheet/ccc?key=0AkZy12yffb5YdFNybkNJaE5hTG9VYkNpdW5ZOWowSFE&usp=sharing

除了临时比较之外,这是不切实际的,但它确实做了一个体面的工作来展示algorithm是如何工作的。

如果你来这个levenshtein distance google sheets似乎levenshtein distance google sheets

我把这一切扔在一起,用milot-midia的代码评论就这个要点( https://gist.github.com/andrei-m/982927 – MIT许可下的代码)

  • 从标题菜单中的表格, Tools – > Script Editor
  • 命名该项目
    • 函数的名称(不是项目)会让你使用func
  • 粘贴下面的代码
 function Levenshtein(a, b) { if(a.length == 0) return b.length; if(b.length == 0) return a.length; // swap to save some memory O(min(a,b)) instead of O(a) if(a.length > b.length) { var tmp = a; a = b; b = tmp; } var row = []; // init the row for(var i = 0; i <= a.length; i++){ row[i] = i; } // fill in the rest for(var i = 1; i <= b.length; i++){ var prev = i; for(var j = 1; j <= a.length; j++){ var val; if(b.charAt(i-1) == a.charAt(j-1)){ val = row[j-1]; // match } else { val = Math.min(row[j-1] + 1, // substitution prev + 1, // insertion row[j] + 1); // deletion } row[j - 1] = prev; prev = val; } row[a.length] = prev; } return row[a.length]; } 

看着以前的计算Levenshtein距离的答案,我认为将它作为一个公式是不可能的。

看看这里的代码

    Interesting Posts