una protect posible paso para macro hacer grabacion ejecutar detener cuando como excel excel-formula levenshtein-distance fuzzy-logic

protect - ¿Es posible hacer una distancia Levenshtein en Excel sin tener que recurrir a Macros?



macros para excel (3)

Dejame explicar.

Tengo que hacer una coincidencia difusa para una empresa, por lo que uso ATM una calculadora de distancia levenshtein, y luego calcular el porcentaje de similitud entre los dos términos. Si los términos son más del 80% similares, Fuzzymatch devuelve "VERDADERO".

Mi problema es que estoy en una pasantía y me voy pronto. Las personas que continuarán haciendo esto no saben cómo utilizar Excel con macros, y quieren que implemente lo que hice lo mejor que puedo.

Entonces mi pregunta es: por ineficiente que sea la función, ¿hay CUALQUIER forma de hacer una función estándar en Excel que calcule lo que hice antes, sin recurrir a las macros?

Gracias.


Si bien no se puede hacer en una sola fórmula para cadenas de tamaño razonable, puede usar fórmulas solo para calcular la distancia de Levenshtein entre cadenas utilizando una hoja de trabajo.

Aquí hay un ejemplo que puede manejar cadenas de hasta 15 caracteres, podría expandirse fácilmente para obtener más información:

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

Esto no es práctico para otras cosas que no sean comparaciones ad-hoc, pero sí hace un buen trabajo para mostrar cómo funciona el algoritmo.


Si llegaste a esto googlear algo así como levenshtein distance google sheets

Tiré esto junto con el comentario del código de milot-midia sobre esta esencia ( https://gist.github.com/andrei-m/982927 - código bajo la licencia de MIT)

  • Desde Hojas en el menú de encabezado, Tools -> Script Editor
  • Nombra el proyecto
    • El nombre de la función (no el proyecto) le permitirá usar la función
  • Pega el siguiente código

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]; }

Debería poder ejecutarlo desde una hoja de cálculo con

=Levenshtein(cell_1,cell_2)


mirando las respuestas anteriores para calcular la distancia de Levenshtein, creo que sería imposible crearla como fórmula.

Eche un vistazo al código aquí