versiones guia espaƱol descargar actualizar sql search full-text-search nlp

sql - guia - qgis manual



Stack Overflow Algoritmo de preguntas relacionadas (7)

Las preguntas relacionadas que aparecen después de ingresar el título, y las que están en la barra lateral derecha cuando se ve una pregunta parecen sugerir preguntas muy acertadas.

Stack Overflow solo hace una búsqueda SQL y no usa algoritmos especiales, dijo Spolsky en una charla.

Qué algoritmos existen para dar buenas respuestas en tal caso. ¿Cómo se puede hacer una búsqueda en la base de datos en tal caso? ¿Se puede buscar el título y buscar las palabras clave o buscar en las etiquetas y esas preguntas con muchos votos en la parte superior?


Eche un vistazo a Porter, derivado de un algoritmo de stemming , si está buscando entrar en algoritmos "relacionados".

Una lectora de inglés, por ejemplo, debe identificar la cadena "gatos" (y posiblemente "catlike", "catty", etc.) como basada en la raíz "cat", y "stemmer", "stemming", "stemmed" como basado en "raíz". Un algoritmo de reducción reduce las palabras "pescar", "pescar", "pez" y "pescador" a la palabra raíz, "pez".

Una vez que haya procesado un documento y lo haya realizado, podrá indexar las palabras derivadas contando y luego comparar con otros documentos. Este es el enfoque más básico para abordar este problema.

También tenga cuidado de ignorar las palabras detenidas como "the", "an", "of", etc.



La barra lateral de preguntas relacionada se basará en las etiquetas para cada pregunta (probablemente clasificándolas según la superposición de etiquetas, por lo que 5 etiquetas en común> 4 etiquetas en común, etc.).

El resto se basará en heurísticas y algoritmos adecuados para el procesamiento del lenguaje natural. Normalmente, estos no son muy buenos en el lenguaje de uso general, pero la mayoría de ellos son MUY buenos una vez que el vocabulario se reduce a un área técnica única, como la programación.


Si escuchas el podcast 32 (desafortunadamente la transcripción no tiene mucho) puedes escuchar a Jeff Atwood decir algo sobre cómo lo hace.

Parece que el algoritmo es algo así como:

  • Toma la pregunta
  • Elimina las palabras más comunes en inglés (de una lista que obtuvo de google)
  • enviar una búsqueda de texto completo al motor de búsqueda de texto completo de SQL Server 2008

Puede encontrar más detalles sobre la búsqueda de texto completo aquí: http://msdn.microsoft.com/en-us/library/ms142571.aspx

Esto podría estar desactualizado ahora; estaban hablando de pasar a una búsqueda de texto completo mejor / más rápida como Lucene , y recuerdo vagamente a Jeff diciendo en el podcast que esto se había hecho.


Tales problemas se resuelven haciendo una "bolsa de palabras" de las palabras derivadas. Eso es básicamente un vector de conteo de palabras. Esas palabras son preprocesadas (derivadas) y ponderadas con su probabilidad de ocurrir en una oración ("el" tiene una probabilidad más alta que "probabilidad" y, por lo tanto, deben ponderarse menos). Entonces puede percibir esta bolsa de palabras como un vector en el espacio euclidiano o como una muestra de una densidad de probabilidad.

Puede aplicar algoritmos como búsqueda de vecino más cercano o hashing semántico. El último parece ser SOTA (ver http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf ).


Use la función de búsqueda de texto completo de SQL Server.