是否有可能在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距离的答案,我认为将它作为一个公式是不可能的。
看看这里的代码