Estoy intentando hacer coincidir un único término de búsqueda con un diccionario de posibles coincidencias utilizando un algoritmo de distancia de Levenshtein. El algoritmo devuelve una distancia expresada como el número de operaciones requeridas para convertir la cadena de búsqueda en la cadena coincidente. Quiero presentar los resultados en la lista porcentual clasificada de las mejores "N" (digamos 10) coincidencias.Porcentaje de coincidencia de coincidencia con Levenshtein Coincidencia de distancia
Dado que la cadena de búsqueda puede ser más larga o más corta que las cadenas de diccionario individuales, ¿cuál sería una lógica apropiada para expresar la distancia como un porcentaje, lo que reflotaría cualitativamente la cercanía "en porcentaje" de cada resultado cuerda, con 100% que indica una coincidencia exacta.
que considera las siguientes opciones:
Q = query string
M = matched string
PM = Percentage Match
Option 1. PMi = (1 - Lev_distance(Q, Mi)/Strlen(Q)) * 100
Option 2. PMi = (1 - Lev_distance(Q, Mi)/max(Strlen(Q), strlen(Mi))) * 100
Opción 1 tiene la posibilidad de porcentajes negativos en caso de que la distancia es mayor que la longitud de la cadena de búsqueda, donde la cadena de búsqueda es larga. Por ejemplo, consulta "ABC" emparejado con "ABC Corp." daría como resultado un porcentaje de coincidencia negativa.
La opción 2 no parece dar un porcentaje consistente en un conjunto de Mi, ya que cada cálculo posiblemente usaría un denominador diferente y, por lo tanto, los valores de porcentaje resultantes no se normalizarían.
Otra manera en que puedo pensar es abandonar la comparación de lev_distance con cualquiera de las longitudes de las cuerdas, pero en su lugar presenta las distancias comparativas de las principales "N" como un rango percentil inverso (rango de 100 percentiles).
¿Alguna idea? ¿Hay mejores enfoques? Me debería estar perdiendo algo, ya que la distancia de Levenshtein es probablemente el algoritmo más común para las coincidencias borrosas, y este debe ser un problema muy común.
Qué pasa con su primera opción, pero cuando el el resultado es negativo, entonces simplemente devuelve 0? PD: He publicado un problema también aquí http://math.stackexchange.com/questions/1776860/convert-levenshtein-distance-to-percents –
No entendí cuál es el problema con Option2 ya que he implementado exactamente el la misma lógica que describe y parece funcionar correctamente. ¿Puedes por favor explicarlo mejor? – Roberto14