Estoy tratando de determinar cuál es la mejor manera de encontrar variaciones de un nombre en una base de datos. Por ejemplo, busco Bill Smith. Me gustaría que devuelva "Bill Smith", obviamente, pero también me gustaría que devuelva "William Smith", o "Billy Smith", o incluso "Willy Smith". Mi idea inicial fue construir una jerarquía de primer nombre, pero no sé dónde podría obtener esos datos, si es que existe.Variaciones de nombre en una base de datos
Dado que los usuarios pueden buscar en el directorio, pensé que esta sería una característica clave. Por ejemplo, las personas con las que fui a la escuela me llamaron Joe, pero siempre voy por Joseph ahora. Por lo tanto, estaba buscando hacer una búsqueda fonética sobre el apellido, ya sea con NYSIIS o Double Metaphone y luego buscar el nombre con esta jerarquía. ¿Existe alguna forma mejor de hacerlo? ¿Tal vez algún tipo de relevancia gradual usando una búsqueda de texto completo con el nombre completo en lugar de una búsqueda de dos partes con el nombre y apellido? Una parte de mí piensa que si almacenara un nombre como un valor único en lugar de valores múltiples, podría facilitar más opciones de búsqueda a expensas de poder dirigirse a un usuario por el primer nombre.
En cuanto a la plataforma, estoy usando SQL Server 2005; sin embargo, no tengo problemas para cambiar parte de la coincidencia en el código; por ejemplo, preseleccionar las claves fonéticas para un usuario, ya que no cambiarían.
Cualquier pensamiento u orientación sería apreciado. Innumerables búsquedas han aparecido vacías. ¡Gracias!
Editar: Parece que hay dos campos muy distintos en la funcionalidad y definitivamente estoy sentado en el medio en este momento. Pude ver el argumento de una búsqueda de texto completo, muy probablemente con la falta de normalización de datos, y un enfoque de varias partes que usa diferentes criterios para diferentes partes del nombre.
En última instancia, el problema se reduce a la intención del usuario. El ejemplo de Bill/William es bueno, porque muestra la mutación de un primer nombre basado en la formalidad del uso. Creo que construir una jerarquía de nombres es la solución más precisa (y extensible), pero va a ser mucho más compleja. El enfoque de búsqueda difusa es más fácil de implementar a expensas de la precisión. ¿Es esta una comparación justa?
Resolución: Al realizar algunas pruebas, he decidido aplicar un enfoque donde el registro inicial tomará un nombre completo y lo dividiré en múltiples campos (nombre, apellido, centro, sufijo, etc.) Como estoy seguro de que no será perfecto, permitiré al usuario editar las "partes", incluido agregar una doncella o un nombre alternativo. En cuanto a la búsqueda, con cualquiera de las soluciones tendré que mantener las variaciones existentes, ya sea en una tabla de base de datos o como un diccionario de sinónimos. Ninguno tiene una ventaja sobre el otro en este caso. Creo que se reducirá al rendimiento, y tendré que ejecutar algunos puntos de referencia para determinar cuál es el mejor. ¡Gracias a todos por su aporte!
Algo que quizás deba tener en cuenta es que no todas las personas hablan inglés y no todos los nombres cumplen con las mismas reglas de denominación. Este fuera de curso depende de cuán amplio sea tu público objetivo, etc. –
Definitivamente lo he tenido en cuenta. Desde el punto de vista de la presentación, el producto inicialmente estará en inglés solamente. Si el producto sobrevive y la demanda lo exige, me extenderé a otros lenguajes y algoritmos según sea necesario. ¡Gracias! –