2010-02-02 21 views
6

Uno de nuestros sitios más grandes tiene una sección donde los usuarios pueden enviar preguntas al propietario del sitio web, que será evaluado personalmente por su personal. Cuando la misma pregunta aparece muy a menudo, pueden agregar esta pregunta en particular al Faq.¿Cómo construir un motor de "preguntas relacionadas"?

Para evitar que reciban docenas de preguntas similares al día, nos gustaría proporcionar una función similar a las 'Preguntas relacionadas' en este sitio (desbordamiento de pila).

¿De qué maneras hay para construir este tipo de función? Sé que debería de alguna manera evaluar la pregunta y compararla con las preguntas en el faq, pero ¿cómo funciona esta comparación? ¿Se extraen palabras clave y, en caso afirmativo, cómo?

Puede valer la pena mencionar que este sitio está construido sobre la pila LAMP, por lo tanto, estas son las tecnologías disponibles.

Gracias!

+0

posible duplicado de [Preguntas relacionadas de Stackoverflow] (http://stackoverflow.com/questions/393505/stackoverflows-related-questions) –

Respuesta

3

No sé cómo funciona Stack Overflow, pero supongo que usa las etiquetas para encontrar las preguntas relacionadas. Por ejemplo, en esta pregunta, las primeras preguntas relacionadas tienen la etiqueta recommendation-engine. Supongo que las coincidencias en las etiquetas más raras cuentan más que las coincidencias en las etiquetas comunes.

Es posible que también desee consultar term frequency–inverse document frequency.

+2

Y, probablemente, el tamaño de la intersección entre los conjuntos de etiquetas. – jensgram

4

Si usted quiere construir algo como esto por sí mismo a partir de cero, tendrá que utilizar algo llamado TF/IDF: frecuencia de término/frecuencia de documento inverso. Eso significa que, para simplificarlo enormemente, encontrará palabras en la consulta que son poco comunes en el corpus como un todo y encontrará documentos que tengan esas palabras.

En otras palabras, si alguien ingresa una consulta con las palabras "Quiero comprar un elefante", de las palabras en la consulta, la palabra "elefante" es probablemente la palabra menos común en su corpus. "Comprar" es probablemente el siguiente. Así que clasifica los documentos (en su caso, consultas previas) por cuánto contienen la palabra "elefante" y luego cuánto contienen la palabra "comprar". Las palabras "I", "a" y "an" probablemente estén en una lista de espera, por lo que las ignorará por completo. Clasifica cada documento (consulta anterior, en su caso) por la cantidad de palabras coincidentes que hay (ponderación de acuerdo con la frecuencia inversa del documento, es decir, alto peso para las palabras poco comunes) y muestra los pocos primeros.

He simplificado demasiado, y necesitaría leer sobre esto para hacerlo bien, pero realmente no es terriblemente complicado de implementar de una manera simple. La página de Wikipedia podría ser un buen punto de partida:

http://en.wikipedia.org/wiki/Tf%E2%80%93idf

1

Teniendo en cuenta que está trabajando en una pila LAMP, entonces usted debería ser capaz de hacer un buen uso de MySQL's Fulltext search functions. Lo cual creo que funciona en los principios de TF-IDF, y debería hacer que sea bastante fácil crear las 'preguntas relacionadas' que desee.

1

Hay un gran libro de O'Reilly - Programming Collective Intelligence - que cubre descubrimiento de grupos, recomendaciones y otros temas similares. De memoria, los ejemplos están en Perl, pero me resultó fácil de entender, viniendo de un fondo de PHP y en pocas horas había construido algo parecido a lo que está buscando.

Yahoo tiene un servicio web extractora de palabras clave en http://developer.yahoo.com/search/content/V1/termExtraction.html

+0

Las muestras que estoy viendo en la vista previa de O'Reilly de * P.C.I. * están en Python. – isomorphismes

Cuestiones relacionadas