Supongamos que tenemos un buscador en Flash para una página de turismo en Argentina.
En esta página probablemente contemos con muchas provincias, por ejemplo "Buenos Aires". Si el usuario ingresa cualquiera de estas búsquedas, va a obtener los resultados esperados (a menos que sea case intensive):
buenos aires
BuEnoS AiReS (o cualquier otra combinación de de mayúsculas y minúsculas)
bueno
Pero si pone una letra de menos (que no sea la última), el buscador va a tener problemas.
Buenoz Aires
Buens Aires
BuXnos Aires
Pero, esto tiene solución. Vamos a emplear una función que nos diga cuántas letras hay que cambiar, quitar o agregar para convertir una cadena en otra (lo que se denomina "distancia levenshtein entre dos cadenas"). En php esta función se llama levenshtein (como es lógico) y forma parte de las funciones nativas del lenguaje.
Lamentablemente en Flash no tenemos nada parecido. Entonces, tenemos que crear la función "a mano".
Un ejemplo sería éste que nos dice cúales son las capitales de las provincias (si desconocen los nombres de las provincias argentinas prueben con "Buen Aires", "Formoza", "entren rio", etc.)
La función podría ser ésta:
Código :
levenshtein = function (cadena1:String, cadena2:String) {
cadena1.toLowerCase ();
cadena2.toLowerCase ();
//
var arrayCadena1 = new Array ();
var arrayCadena2 = new Array ();
//
var largoMax = Math.max (cadena1.length, cadena2.length);
var cadenaMax = (cadena1.length == largoMax) ? "Cadena1" : "Cadena2";
var cadenaMin = (cadenaMax == "Cadena1") ? "Cadena2" : "Cadena1";
//
arrayCadena1 = (cadena1.length == largoMax) ? cadena1.split ("") : cadena2.split ("");
arrayCadena2 = (cadena1.length == largoMax) ? cadena2.split ("") : cadena1.split ("");
var valor = 0;
for (var a in arrayCadena1) {
if (arrayCadena1[a] != arrayCadena2[a]) {
valor++;
}
}
return valor;
};
Esta función funciona como podría esperarse. Donde el valor devuelto es la distancia de la que habíamos hablado antes.
Pero tenemos un problema con búsquedas de múltiples palabras. Volvamos al ejemplo de las provincias argentinas.
Obviamente, esta función podría ser agregada a un buscador. Entonces, tenemos 2 provincias, Jujuy y Buenos Aires.
Si buscamos Buenos Ayres y el buscador nos devuelve la palabra que más se acerca a nuestra entrada, obviamente recibiremos Buenos Aires como salida. Pero si buscamos Junos Aires, recibiremos Jujuy. Aunque esa búsqueda tiene solo 2 letras en común con Jujuy y 9 con Buenos Aires (10 si contamos el espacio)
Pero si lo analizan se van a dar cuenta que al faltar una letra (la B está reemplazada por una J, pero la e simplemente no está), nuestra función comienza a comparar caracteres equivocados. Recordemos que busca los caracteres del mismo índice y no hace una búsqueda caracter a caracter (que demoraría mucho más).
Entonces, para propósitos prácticos armé una segunda función que emplea a la primera, pero que agrega un poco más de funcionalidad:
Código :
levenshtein2 = function (cadena1:String, cadena2:String) {
//
var miValor = 0;
var arrayPalabras1 = new Array ();
var arrayPalabras2 = new Array ();
var largoMax = Math.max (arrayPalabras1.length, arrayPalabras2.length) + 1;
//
arrayPalabras1 = cadena1.split (" ");
arrayPalabras2 = cadena2.split (" ");
//
// Si los arrays tienen distinto número de elementos, agregamos los que hacían falta
for (i = 0; i <= largoMax; i++) {
if (arrayPalabras1[i] == undefined) {
arrayPalabras1[i] = "";
}
if (arrayPalabras2[i] == undefined) {
arrayPalabras2[i] = "";
}
}
//
for (i = 0; i <= largoMax; i++) {
miValor += levenshtein (arrayPalabras1[i], arrayPalabras2[i]);
}
return miValor;
};
Recordemos que para usar levenshtein2 tenemos que definir la función levenshtein primero (o juntarlas en una sola función, lo que complicaría más entender su funcionamiento, algo especialmente tonto en un tutorial)
Espero les sea útil, últimamente vi en el foro varios pedidos de buscadores y creo que la búsqueda por similitud es algo a tener en cuenta.
espectacular, casualmente tengo un sitio de turismo sobre la ciudad de Buenos Aires.pero, ¿cómo hago un buscador en Flash? Por:claudio_blog
Podrías probar con éste. Pero para usar éstas funciones, te recomendaría tomar el texto en el que querés buscar y convertirlo a un Array (los datos del ejemplo que puse los armé de esa manera). Luego usas un for..in para recorrer el Array comparando la búsqueda con la palabra ingresada y tomás como correcta la palabra/s que menor distancia levenshtein presente/n.
En caso de que el usuario ingrese más de una palabra, repetís la operación anterior separadamente para cada una de ellas. Por:HernanRivas
Uta esta genial esto lo podrias poner para descargar el ejemplo completo porfavor te lo agredeceria enormemente te dejo mi correo de todas formas si es que puedes enviarmelo por mail : odiaz@artificio.cl
Te lo REagradesco mucho chaooo Excelente aporte !!!! Idolo ! jajaja Por:Oscar_blog
buen aporte gracias como hago si quiero que las palabras que busque esten en un archivo externo Por:adonys74_blog
Bueno, como esta función es casi idéntica a la de php podrías usar php. En todo caso, modificás un poco el código de levenshtein2 para que funcione en ese lenguaje (no debería ser muy difícil dado que son bastante similares). Por:HernanRivas
deberian poner el archivo del tutorial Por:alvaro_blog
29 % Por:
Oye gracias, voy a mirarlo con calma y te cuento como me fue Por:juliovanegas
como hago un cambio en la busqueda o como lo puedo insertar en un proyecto EXE para la busqueda de palabras Por:rafa_blog
Bueno esto me sirve para poder hacer el diccionario que quiero hacer, pero necesitaria los archivos del tutorial porque la verdad no se como hacerle esta un poco dificil intente hacerlo guiandome por el post pero soy muy novice en actionscript asi que buehh si alguien tiene los archivos del tutorial me los envia porfavor tengo solo horas para entregar este trabajo es para mañana llevo como 3 semanas intentndo hacerlo pero la verdad no e conseguido nada y bueno lo que sucede tambien es que tengo poco tiempo y son muchas materias bueno le agradeceria a la persona que me responda porfas o si ya hicieron un diccionario en flash me lo facilite, bueno un millon de gracias de ante mano saludos. Por:simplepanas
hola, podrias poner el archivo fla para descargar de este ejemplo, gracias. Por:luis_blog
deberian de tener informacion azteca, inca y maya Por:cnfbverhcfidnvowe-blog
necesito un programa donde ingrese algunas letras y etse me busque las palabras posibles .... por ejemplo escribo
5 letras a g h a i.. y el burcador escriba las posibles palabras
grcias Por:albono-blog
pero colega....una pregunta...como generas la base de datos con las palabras?, donde pongo todas las palabras que quiero que busque...no entiendo eso talvez es una duda que muchos tienen.
necesito palabras que comiencen por ante,por letio pero yaaaaaaaaaaa Por:laura-blog
Necesito hacer un buscador ya sea en flash o html donde este el campo del buscador y el cliente pueda colocar un codio como este 1001 y cuando le de buscar le salgo la informacion de dicho codigo la numeracion empieza desde el 1001 hasta 9999 si me pueden ayudar muchisimas gracias Por:Pablo-blog
vuelvase serio con esto payasos Por:carlos andres-blog
no entiendo tu pagina Por:yot-blog
esta pagina esta del asco Por:buuuuuuuu-blog
ke pagina maz fea ... no pierdan el tiempo haciendo estupideses Por:keilytha-blog