** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - Utilidades: Símiles, similares, corrector
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoUtilidades: Símiles, similares, corrector

 Responder Responder
Autor
Mensaje
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5360
Enlace directo a este mensaje Tema: Utilidades: Símiles, similares, corrector
    Enviado: 15/Febrero/2014 a las 00:00

Hola buenas noches.

Antes que nada, agradecer la paciencia que tienen conmigo y con mis “similes”.

Agradecimiento especial a Emilio Verástegui (Emiliove), Roberto (Mexman70), Diego (Genoma111) y Enrique.

Aquí aporto todo lo que he aprendido hasta la fecha sobre Levenshtein y Alineaciones, Diego hizo hincapié en esto último y es, a mi parecer, el mismo método que se usa en los correctores ortográficos, evidentemente salvando las distancias entre lo que esos correctores hacen y mi simple aportación al respecto.

Con respecto a Enrique, su aportación fue básica, “Vicente, has comprobado si consigues sugerir lo que la máquina debe sugerir o tal vez es que no sugiere lo que tu quieres que sugiera”. Touché.

En cuanto a Mexico, un favor especial el que me hayan probado ciertos ejemplos que les he enviado.

Comencemos con la síntesis de Levenshtein:

Aparte de temas para estudiar:
http://www.google.com/webhp?nord=1#nord=1&q=la+distancia+de+levehsntein

Decir que se basa en la “distancia de edición” que hay entre dos palabras a la hora de conseguir, en cuantos pasos, que la se compare con otra se haga igual a la otra. Cuando decimos “distancia de edición”, estamos hablando de que comparando las palabras “Alberto” y “Laberot”, debemos recurrrir a cambiar 4 letras y estaremos con la misma palabra. La distancia de edición es pues el número de letras que se deberán cambiar para obtener la misma palabra con la que se evalúe.

Sigamos con la síntesis de Alineaciones:

Aparte de temas para estudiar:

http://www.google.com/webhp?nord=1#nord=1&q=smith+y+waterman
http://www.google.com/webhp?nord=1#lr=lang_es&nord=1&q=nedelman&tbs=lr:lang_1es

De los anteriores (Smith, Waterman, Wunsch, Needelman), me quedo, por ahora, con el estudio sobre la variante LCS, “Longest Comon Subsequence”

http://www.google.com/webhp?nord=1#nord=1&q=longest+comon+subsquence

LCS trata de Alineaciones y consigue encontrar la mejor subsecuencia dentro de una palabra.

Para el caso anterior en Levenshtein de “Alberto” y “Laberot”, la puntuación de alineación óptima en LCS es de 5. (haciéndose una pequeña composición, podríamos decir que si hablásemos en términos de Levenshtein, aquí en LCS nos daría 2, en vez del 4 que nos da Levenhsrtein). Recomiendo leer toda la literatura posible que he puesto arriba al respecto.

También me he permitido aportar tres ejemplos en Excel, uno de Levenshtein, el otro de LCS y el otro también sobre LCS (desarrollo personal propio mío, vimipas, con una pequeña variante que ahora explicaré). En la hoja de Excel tan solo permito que se escriba en la palabra vertical, con fondo rojo y tipo de letra en amarillo del cuadro de Levenshtein, este hace que funcionen el resto de cuadros.

Para el que le interese ver o hacer varias pruebas con otras palabras, se puede desproteger la hoja de Excel tranquilamente con el sistema habitual, no tiene clave de protección, tan solo está protegida la hoja para que no se borren las fórmulas, luego ya es responsabilidad de cada cual, en caso de desprotección.

Todos los cuadros de Excel (y la función con su array correspondiente que nos llevará después a Access) usan un cuadro de doble entrada, y mientras que en Levenshtein se usan el 0,1,2 ….. hasta el total de dígitos que tengan las palabras (tanto vertical como horizontal), en LCS se usa el 0,0,0… siempre, mientras que en el desarrollo propio mío, vimipas, cambio el 0,0,0…. Por el 7,7,7…. (quiero decir por el máximo número de dígitos de la palabra que se evalúe. Como en este caso es Alberto, la que pongo en el ejemplo es 7, para Aureliano, sería 9,9,9…

Recomiendo ver el ejemplo ya que es muy ilustrativo para entender el concepto que se manejará luego en VBA.

Esto es referido a que en VBA, no se puede usar código para la expresión Min(x,x,x) mientras que en Excel sí. Una vez entendido lo que explico en Excel, es muy fácil ver luego la Función que se desarrolla en VBA. Trae la emulación de cómo pasar Min (o Max, en mi desarrollo) a VBA.

Aquí dejo los dos ejemplos que necesito dejar para toda la explicación que he puesto, uno es el de Excel que acabo de citar y el otro en Access es el que maneja lo que yo llamo “símiles”, que al final no es mas que un intento de corregir cualquier posible error a la hora de escribir una búsqueda y por lo tanto, ofrecer aquello que mas se parezca a lo que se busca.

Como veréis, este de Access está utilizando conceptos muy dispares de lo que habitualmente tocamos en Access en Formularios continuos, aunque he tratado de emularlo al máximo. Uso el método Collectión y 25 controles independientes para mostrar lo que se busca. Todo ello porque el resultado que pretendo ofrecer es muy rápido en su presentación y este es el método que mas rápido he observado (tal vez me falte algún otro que estudiar) que funciona para lo perseguido.

Aquí el enlace a la Hoja de Excel y la Base en Access:

https://www.dropbox.com/s/glb9mdcrz60wvje/EXPLICACI%C3%93N%20LEVENSHTEIN%20Y%20LCS%20-Longest%20Comon%20Subsequence.rar


Por fin comentar el porque creo que estoy en la misma pista que los correctores ortográficos, por esto:

Con el resultado que yo presento, automáticamente el cursor se pasa directamente al botón que permite lanzar el corrector ortográfico y en él se puede comprobar si lo que yo presento, es lo mismo que presentaría el corrector ortográfico de Access.

La razón que me inclina a usar LCS es precisamente (con los matices que luego aplico en las funciones respectivas) porque me ofrece el valor (el resultado de la función) que me permite conseguir ofrecer en muchísimas ocasiones el mismo resultado que el corrector ortográfico. Mientras que con Levenshtein me era totalmente imposible.

Por favor, prueben a escribir su propio nombre en cualquier momento (correctamente, como Vicente, Ivcenet, Ivcente, etc., pulsen intro y analizen lo sugerido por el programa y lo sugerido por el corrector ortográfico de Access.

Lo tengo desarrollado, como ya dije en mi último hilo al respecto, con la Popiedad “Después de actualizar”. Espero poder entender como hacerlo, en la próxima versión con la Propiedad “Al cambiar”.

Espero que lo disfruten,  y con que lo gocen la mitad de lo que yo he disfrutado haciéndolo, ya van bien.

Saludos

Gracias
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable