tengo el siguiente requisito (Clase de Google "Qué quieres decir?"): -cómo corregir la entrada del usuario
Tengo valores muchos (digamos 1 millón) (nombres). El usuario tecleará una cadena de búsqueda.
No espero que el usuario deletree los nombres correctamente.
Entonces, quiero hacer una especie de Google "¿Quiso decir?". Esto mostrará una lista de todos los valores posibles de mi almacén de datos. Hay una pregunta similar pero no la misma here. Esto no respondió mi pregunta.
Mi pregunta: - 1) Creo que no es recomendable almacenar esos datos en RDBMS. Porque entonces no tendré filtro en las consultas SQL. Y tengo que hacer un escaneo completo de la tabla. Entonces, en esta situación ¿cómo se deben almacenar los datos?
2) La segunda pregunta es la misma que this. Pero, solo por la totalidad de mi pregunta: ¿cómo busco en el gran conjunto de datos? Supongamos que hay un nombre Franky en el conjunto de datos. Si un usuario escribe como Phranky, ¿cómo hago coincidir el Franky? ¿Tengo que recorrer todos los nombres?
Me encontré con Levenshtein Distance, que será una buena técnica para encontrar las posibles cadenas. Pero nuevamente, mi pregunta es, ¿tengo que operar con todos los 1 millón de valores de mi almacén de datos?
3) Lo sé, Google lo hace observando el comportamiento de los usuarios. Pero quiero hacerlo sin observar el comportamiento del usuario, es decir, al usar, no sé todavía, decir algoritmos de distancia. ¡Porque el primer método requerirá un gran volumen de búsquedas para comenzar!
4) Como Kirk Broadhurst señaló en una respuesta below, hay dos escenarios posibles: -
- usuarios escribir mal una palabra (una edición algoritmo distancia)
- Los usuarios no saber una palabra y adivinar (un algoritmo de coincidencia fonética)
Me interesa los dos. Son realmente dos cosas separadas; p.ej. Sean y Shawn suenan igual, pero tienen una distancia de edición de 3, demasiado alta para ser considerada un error tipográfico.
Google ¿"quisiste decir?" (en términos generales) observando cómo los usuarios corrigen * ellos mismos * y luego ofrecen la corrección más popular a otros usuarios. –
Estoy de acuerdo. Pero mi pregunta es cómo implementar una funcionalidad similar. Creo que será posible implementar funcionalidades similares computacionalmente también. – Sabya
casi todas las respuestas aquí son informativas. Entonces, creo que deberíamos evaluar las soluciones y formar un análisis completo combinado. Trataré de hacerlo en algunos fines de semana. – Sabya