2009-12-08 21 views
16

Me gustaría darles a los usuarios la capacidad de buscar a través de una gran lista de negocios, pero aún encontrar coincidencias cercanas.Ideas para crear una característica "¿Quiso decir XYZ" en el sitio web

¿Alguien tiene alguna recomendación sobre la mejor manera de hacerlo cuando no está apuntando a palabras simples del diccionario, sino nombres complejos como ABC Business Name?

Atentamente.

+0

+1 para ver más buenas respuestas. –

+0

Estoy de acuerdo. Admiro la profundidad del conocimiento de mis compañeros ingenieros de software y todas estas respuestas son buenas pistas. –

Respuesta

7

Echa un vistazo al artículo de wikipedia en Levenshtein distance. Es un concepto bastante simple para entender y es bastante fácil implementar un algoritmo en cualquier idioma que esté usando, en su caso, C#.

Encontré un ejemplo en C# para usted here.

Además, here es un ejemplo de un corrector ortográfico de Peter Norvig de Google. Se dijo en el podcast de SO hace unos pocos episodios que Jon Skeet intentó una reescritura de este mismo algoritmo en C#. No estoy seguro de si lo completó y/o lo puso a disposición del público sin embargo.

+0

cosas geniales. Voy a adaptar esto para operar el lado del servidor SQL como un sproc para obtener el mejor rendimiento posible y solo usarlo cuando no haya coincidencias. Gracias por la visión. –

+0

Como una actualización, esto se ha implementado en C# aquí http://www.codegrunt.co.uk/2010/11/02/C-Sharp-Norvig-Spelling-Corrector.html –

2

Considere el uso de la coincidencia de palabras clave y la similitud basada en la distancia de edición. Podría combinarse con "búsqueda original" y "hecho clic".

1

Esto es probablemente una solución loca pero podría dividir el nombre de la empresa por el espacio y luego buscar cualquiera de los elementos o tal vez la primera pareja.

Así que puede buscar en 'ABC' y 'Negocio', pero omita 'Nombre', ya que esto podría llevar demasiado tiempo.

Incluso podría verificar si la cuerda tiene una cierta longitud, luego recortar y simplemente buscar en la primera decir 5 letras.

Ha echado un vistazo a "soundex" como una forma de buscar a través de sus negocios. De nuevo, creo que necesitarías dividir el nombre por espacio.

1

Puede consultar las funciones de SQL Server SOUNDEX y DIFFERENCE. SOUNDEX convierte una secuencia de caracteres (como una palabra) en un código de 4 caracteres que será el mismo para palabras que suenan de forma similar. DIFFERENCE da un número que representa cómo dos cuerdas "diferentes" se basan en el sonido.

Podría, por ejemplo, crear una columna calculada basada en la función SOUNDEX y coincidir en esa columna más adelante. O podría usar DIFERENCIA en una cláusula WHERE.

+1

También puede hacer una búsqueda en Google para MetaPhone, que es básicamente una versión más compleja de Soundex. Soundex fue creado en 1918 y es un algoritmo muy simple/básico. Metaphone generalmente dará mejores coincidencias, pero no está integrado en SQL, aunque hay numerosas versiones de T-SQL de él alrededor – Sparky

Cuestiones relacionadas