2010-11-17 14 views
6

Estoy implementando un sistema de etiquetas similar al sistema de etiquetas StackOverflow pero me pregunto cómo obtener etiquetas relacionadas y definir los pesos de relaciones entre etiquetas como la lista de "Etiquetas relacionadas" en cualquier etiqueta página como esta https://stackoverflow.com/questions/tagged/php definen la relación peso por la concurrencia entre 2 o más etiquetasHow-to build sistema de etiquetado como stackoverflow

Cómo puedo hacer esto en PHP/MySQl para definir las etiquetas más relacionadas para la etiqueta "X" y mantener todos los pesos a fecha a medida que los usuarios agregan más y más publicaciones/preguntas?

Respuesta

2

Es probable que desee ver en las estadísticas para esto:

  1. dado una etiqueta X
  2. verificación de todas las demás etiquetas Y
  3. recuento de la frecuencia con la Y y X se presenta en el mismo tiempo
  4. dividir por la frecuencia con la que Y aparece
  5. ???
  6. Beneficio !!!

Para obtener más información sobre el paso 5: esta información solo cambia muy lentamente, por lo que realmente puede almacenar en caché este material y solo volver a crearlo cuando tenga tiempo.

Lo que quiere al final es una relación

conditional_probability(X, Y, P) 

que le dice qué probabilidad (P) Y se etiqueta, dado X. P se calculó en el paso 4.

+5

Creo que deberías ser más explícito aquí en el paso cinco. ;) – Bobby

+0

Iba a escribir esto como una consulta SQL, pero mirando el número de preguntas (por lo tanto, referencias de etiquetas) en este sitio web, dudo que cada vez que alguien quiera hacer una pregunta, produzca tantos conteos y grupos . Después de todo, esta información es más a menudo leída que modificada. – AlexanderMP

1

que utiliza este blog entrada para calculating relative tag size within a cloud. Puede usar este algoritmo en todo el conjunto o en un conjunto encontrado particular.

En lugar de almacenar los pesos desnormalizados para todas las etiquetas en la base de datos, los guardo en caché en mi proceso (Ruby) y los reconstruyo cuando se agregan/eliminan las etiquetas o cuando se reinicia el proceso.

cuanto a cómo almacenarlos, por lo general quieren:

  1. Una tabla de etiquetas asociar los nombres de etiquetas únicas con los identificadores de fila y
  2. Una tabla tags_items que le proporciona su mapeo-n-an entre etiquetas y artículos

Una vez que tenga eso, y una vez que haya encontrado un conjunto de elementos en una página de resultados, es una unión simple y única para descubrir el conjunto de etiquetas 'relacionadas'.

0

1 Cada ID del mensaje puede ser etiquetado con una o más etiquetas (PHP + otros tags)

2 Volviendo de la misma manera cada etiqueta ha asociado ID del anuncio

3 Foreach ID conseguir todas las etiquetas otra de PHP

4 Mostrar sólo las que tiene contar más de un número de prticular (por ejemplo 4000)

pensar de esta cuestión ha sido etiquetado como "MySQL" "base de datos de diseño" "etiquetas" y "etiquetado" Do ves cómo has relacionado PHP con otras etiquetas.

Cuestiones relacionadas