name - meta tags generator
Etiquetar jerarquÃas y manejo de (3)
Este es un problema real que se aplica a los elementos de etiquetado en general (y sí, esto también se aplica a StackOverflow, y no, no es una pregunta sobre StackOverflow).
Todo el problema del etiquetado ayuda a agrupar elementos similares, independientemente de los elementos que puedan ser (bromas, publicaciones en blogs, preguntas, etc.). Sin embargo, allí (generalmente pero no estrictamente) hay una jerarquía de etiquetas, lo que significa que algunas etiquetas también implican otras etiquetas. Para usar un ejemplo familiar, la etiqueta "c #" también implica ".net"; Otro ejemplo, en una base de datos de bromas, una etiqueta de "rubias" implica la etiqueta "burlona", similar a "irlandés" o "belge" o "canadiense", etc., dependiendo del origen del país del chiste.
¿Cómo ha manejado esto, si tiene, en sus proyectos? Proporcionaré una respuesta que describa dos métodos diferentes que he utilizado en dos casos separados (en realidad, el mismo mecanismo pero implementado en dos entornos diferentes), pero también me interesan no solo los mecanismos similares, sino también su opinión sobre el problema de jerarquía. .
El mecanismo que implementé fue no usar las etiquetas dadas, sino una tabla de búsqueda indirecta (no estrictamente términos DBMS) que vincula una etiqueta a muchas etiquetas implícitas (obviamente, una etiqueta está vinculada a sí misma para que esto funcione).
En un proyecto de Python, la tabla de búsqueda es un diccionario codificado en etiquetas, con conjuntos de valores de etiquetas (donde las etiquetas son cadenas simples).
En un proyecto de base de datos (indiferente qué motor RDBMS era), existían las siguientes tablas:
[Tags]
tagID integer primary key
tagName text
[TagRelations]
tagID integer # first part of two-field key
tagID_parent integer # second part of key
trlValue float
donde el trlValue era un valor en el espacio (0, 1), utilizado para dar una gravedad para cada etiqueta vinculada, una relación de etiqueta autocontenida siempre lleva 1.0 en el trlValue, mientras que el resto se calcula algorítmicamente (no es importante cómo exactamente). Piensa en el ejemplo de base de datos de bromas que di, un registro [''rubio'', ''burlón'', 0.5] se correlacionaría con un [''pondian'', ''burlón'', 0.5] y por lo tanto sugerirá todas las bromas burlonas dadas a otro.
En realidad, diría que no es tanto un sistema jerárquico sino una red semántica con sentidas distancias entre los significados de las etiquetas. Qué quiero decir: las matemáticas están más cerca de la física experimental que de la jardinería.
Posibilidad de construir una red de este tipo: construya pares de etiquetas y deje que la gente juzgue la distancia percibida (usando una medida como 1-10, que significa algo así como [sinónimos, igual, ..., antónimos], ...) y cuando busque, busca todas las etiquetas dentro de una cierta distancia.
¿Debe una medida tener la misma distancia si proviene de la dirección opuesta ([a, b] cerrar -> [b, a,] cerrar)? ¿O la proximidad implica [a, b] cerrar y [b, c] cerrar -> [a, b] cerrar?
¿Tal vez la primera palabra activará por defecto otro campo semántico? Si comienza en "trabajador social", el "analista" está cerca. Si comienza en "programador", "analista" también está cerca. Pero a partir de cualquiera de estos puntos, probablemente no contarías el otro como cercano ("trabajador sociable" de ninguna manera está cerca del "programador").
Por lo tanto, solo tendrías pares juzgados y juzgados en ambas direcciones (en orden aleatorio).
[TagRelations]
tagId integer
closeTagId integer
proximity integer
Ejemplo para la selección de etiquetas similares:
select closeTagId from TagRelations where tagId = :tagID and proximity < 3
Esta es una pregunta difícil. Los dos extremos son una ontología (todo es jerárquico) y una folksonomía (las etiquetas no tienen jerarquía). He respondido esto en WikiAnswers , con una referencia al artículo "Ontology is Overrated" de Clay Shirky, que afirma que no debes establecer ninguna jerarquía.