2010-02-10 14 views
9

¿Cómo construir un sistema de etiquetado como SO?¿Cómo construir un sistema de etiquetado como SO?

Estoy usando un cuadro de texto único en mi sitio web asp.net mvc para enviar "etiquetas".

En primer lugar, traté de dividir las etiquetas con las comas "asp.net, C#, sql server". Funciona, pero si el usuario olvidó separar las etiquetas con comas, tengo un problema para dividir esa cadena.

"asp.net C# sql server": el servidor sql debe ser una sola etiqueta, no dos "sql" + "servidor".

Además i "no puedo" (que no debería tener cuidado acerca de esto ...) Preguntar al usuario para utilizar carácter "-" para separar las palabras de la etiqueta: "sql-server"

Alguien ayuda?

+1

Pero entonces, ¿cómo puedo etiquetar algo con sql y el servidor? (Y no digas "server sql";)) – Aistina

+0

debes etiquetar comas "sql, server" separadas ... –

+0

Bueno, no puedes tener * both * comma separated * y * space separated. Tendrás que elegir uno o el otro. Ambos tienen sus ventajas y desventajas. Como señaló @bebop, siempre que proporciones una funcionalidad de autocompletar no creo que importe demasiado. – Aistina

Respuesta

5

o coincide con la cadena para las etiquetas existentes, por lo que puede tener etiquetas con espacios (suponiendo que busca primero las etiquetas más grandes para encontrar 'servidor sql' antes de buscar 'sql'. Podría hacer esto más robusto al solo permitir el uso de etiquetas existentes, y tener un mecanismo separado para crear nuevas etiquetas. De esta forma, los usuarios podrían crear fácilmente etiquetas con espacios, ya que cualquier elemento ingresado en el nuevo cuadro de etiqueta sería una sola etiqueta como 'sql server 2005'.

EDIT:

Alternativamente, usted podría tener una sintaxis especial en las etiquetas para crear otros nuevos:

'sql, asp.net, [NEWTAG] servidor SQL, C#' usaría etiquetas 'SQL', 'asp.net', 'C#' existente y crearía una nueva etiqueta 'sql server'

/EDIT

o divididos en espacios y no permiten etiquetas con espacios

en su ejemplo, ¿cómo saber la diferencia entre 'SQL Server' (1 tag) y 'servidor 'sql'' (2 etiquetas)?

si mira SO, las etiquetas están separadas por espacios, por lo que una etiqueta es sql-server.

Como siempre y cuando tenga las etiquetas sugeridas a ellos, ya que están entrando en ellas no creo que esto va a ser un problema

+0

en mi primer ejemplo, separe las etiquetas con comas, por lo que puedo notar esa diferencia. –

+0

pero usted mismo dijo, esta no es una buena solución. de lo contrario, ¿cómo puede saber si un usuario envía 'asp.net C# sql server' que esta no es una etiqueta? –

+0

sí, ese es mi problema ... –

6

Stackoverflow tiene exactamente el mismo problema con los usuarios entrar incorrectamente etiquetas, por ejemplo, si tiene ingresó 'manipulación de cadena' en lugar de 'manipulación de cadena'. Acabas de cambiar el separador de etiquetas del espacio por comas.

El problema fundamental sigue siendo la misma, por lo que no es de extrañar que la solución también es el mismo:

  1. Educar a sus usuarios a través de la ayuda conveniente en su sitio.
  2. Moderadores que útilmente reparan los errores de otros usuarios, limpiando el sitio.
  3. Los moderadores también educan a sus usuarios cuando cometen errores para que no cometan el mismo error en el futuro.

StackOverflow demuestra que este modelo puede funcionar bien.Una solución automatizada para corregir los errores del usuario a veces generará errores debido a la ambigüedad que usted mismo señaló. Esto frustrará a las personas que lo están haciendo correctamente solo para ser frustrados por el software "arreglando" sus etiquetas para ellos.

2

Puede intentar un tipo de enfoque estadístico de spelling correction: si hay un montón de cosas ya etiquetadas como "servidor sql", podría hacer una conjetura. Por supuesto, a veces se equivocaría.

9

Hay una manera (fácil) que puedo pensar para permitirle a su usuario incluir cualquier caracter en una etiqueta. Esa solución es permitir que el usuario ingrese solo una etiqueta a la vez. Puede tener un cuadro de texto donde el usuario ingresa la etiqueta (el autocompletado de las etiquetas existentes es un plus definitivo), presiona enter o un botón cuando termina la entrada, y las etiquetas ingresadas aparecen debajo del cuadro de texto en una lista de etiquetas aplicadas. Esas etiquetas aplicadas deben tener un botón para cada etiqueta para permitir que el usuario elimine la etiqueta.

Wordpress tiene un mecanismo de etiquetado similar al crear publicaciones, pero permite que se ingresen varias etiquetas a la vez simplemente indicando qué carácter delimita las etiquetas. Pedir un delimitador no es un gran problema, pero si no quieres ordenar un delimitador en particular, simplemente tendrás que restringir al usuario para que ingrese una sola etiqueta a la vez.

image of wordpress's tag box

Otra idea (editar)

acabo de leer esto hoy: Tokenizing Control

0

Mi consejo:

En primer lugar, desde el principio, elegir de inmediato: hacer ¿Quieres permitir etiquetas con espacios en sus nombres o no? Elige uno u otro, no trates de crear un loco alboroto con predicción heurística sobre si el usuario quiso decir una cosa o la otra.

O esto:

sql server 

siempre significa 1 etiqueta, o siempre significa 2. Sólo tiene que elegir en este momento lo que quiere. Uno o el otro. Si tuviera que elegir para no permitir espacios en las etiquetas (eso significa que es 2 etiquetas), pero también desea que los usuarios puedan separar las etiquetas con comas, por ejemplo:

sql,server 

entonces se podría tratar con el usuario entra en un montón de etiquetas mezcladas, por ejemplo:

sql server,regular expressions,java c# 

Con código como este:

string[] tags = Regex.Split(input, @"(,|\s)+"); 

, que pueden ayudarle:

tags[0]: sql 
tags[1]: server 
tags[2]: regular 
tags[3]: expressions 
tags[4]: java 
tags[5]: c# 
Cuestiones relacionadas