2008-09-23 22 views
19

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 acerca de StackOverflow).Jerarquía de etiquetas y manejo de

Todo el problema de etiquetado ayuda a agrupar elementos similares, independientemente de los elementos que puedan ser (chistes, publicaciones de blog, preguntas, etc.). Sin embargo, existe (normalmente pero no estrictamente) una jerarquía de etiquetas, lo que significa que algunas etiquetas implican otras etiquetas también. 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. .

Respuesta

1

El mecanismo que he implementado 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 funcione))

En un proyecto python, la tabla de búsqueda es un diccionario codificado en etiquetas, con grupos de valores de etiquetas (donde las etiquetas son cadenas simples).

En un proyecto de base de datos (indiferente que RDBMS motor que era), no eran 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 (0, 1] espacio, que se utiliza para dar una gravedad para cada etiqueta vinculada, una relación de etiqueta self-to-self siempre lleva 1.0 en el trlValue, mientras que el resto se calcula algorítmicamente (no importa cómo exactamente). Piensa en la base de datos de bromas de ejemplo que di; a ['blonde', ' burlesco ', 0.5] registro se correlacionaría con un [' pondian ',' burlón ', 0.5] y por lo tanto sugieren todos los chistes burlones dado otro.

6

Esta es una pregunta difícil norte. Los dos extremos son una ontología (todo es jerárquico) y una folksonomía (las etiquetas no tienen jerarquía). Tengo answered this on WikiAnswers, con una referencia al artículo "Ontology is Overrated" de Clay Shirky que afirma que no debes establecer una jerarquía.

+0

Clay Shirky fue muy interesante. Obviamente, el factor de proximidad (en el ejemplo de la base de datos) se introdujo para suavizar los términos relacionados (un ejemplo en el artículo de 'gay' y 'queer'). – tzot

+2

Por alguna razón no pude encontrar el enlace al artículo de Clay Shirky en la página de WikiAnswers. Aquí está: http://www.shirky.com/writings/ontology_overrated.html. Me gustó también. –

4

En realidad, yo 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: Construir pares de etiquetas y dejar que la gente juzgue la distancia percibida (utilizando una medida como 1-10, que significa algo así como [sinónimos, por igual, ..., antónimos], ...) y cuando busca, busque todas las etiquetas dentro de una cierta distancia.

¿Tiene que ser una medida igual a la 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 de selección de etiquetas similares: el artículo de

select closeTagId from TagRelations where tagId = :tagID and proximity < 3 
+0

La proximidad es unidireccional; si debe ser bidireccional, se insertará un registro diferente con una proximidad diferente. – tzot

+0

@malach: como un problema de UX, con respecto al uso de la jerarquía, diría que (i) el software debe usar el enfoque de red semántica que describió basándose en las matemáticas, pero (ii) los usuarios que quieren hacer "jardinería" en su las colecciones de etiquetas personales deben * estar permitidas *, pero no * forzadas a * organizar etiquetas en jerarquías porque * algunos * usuarios sentirán que es más cómodo que una lista plana. En los sistemas de software donde la "personalización" de las etiquetas está fuera de discusión, se podría usar una lista plana, a menos que los expertos en el dominio decidan lo contrario. – rwong

Cuestiones relacionadas