2010-02-10 3 views
9

Как создать систему тегов, такую ​​как SO?Как создать систему тегов, такую ​​как SO?

Я использую уникальное текстовое поле на моем веб-сайте asp.net mvc для отправки «тегов».

Прежде всего, я попытался разделить теги запятыми "asp.net, C#, sql server". Это работает, но если пользователь забыл разделить теги запятыми, у меня проблема с разделом этой строки.

«asp.net C# sql server»: сервер sql должен быть единственным тегом, а не двумя «sql» + «сервером».

Кроме того я «не может» (он не должен заботиться об этом ...) попросить пользователя использовать символ «-», чтобы отделить слова тега: «SQL-сервер»

Кто-то помочь?

+1

Но как же я могу пометить что-нибудь с sql и сервером? (И не говорите «sql сервера»;)) – Aistina

+0

вы должны пометить «sql, server» запятыми, разделенными ... –

+0

Ну, вы не можете * разделять * * и * * пробел *. Вам придется выбирать один или другой. Оба имеют свои преимущества и недостатки. Как отметил @bebop, до тех пор, пока вы предоставляете функцию автозаполнения, я не думаю, что это имеет большое значение. – Aistina

ответ

5

либо вы соответствуете строке для существующих тегов, так что вы можете иметь теги с пробелами (при условии, что вы сначала ищете теги большего размера, чтобы найти «sql-сервер», прежде чем искать «sql». прочный, только позволяя использовать существующие теги и иметь отдельный механизм для создания новых тегов. Таким образом, пользователи могут легко создавать теги с пробелами, так как все, что было введено в новом теге, было бы одним тегом типа «sql server 2005».

EDIT:

в качестве альтернативы вы можете иметь специальный синтаксис в тегах для создания новых:

'SQL, asp.net, [новыйТег] SQL Server, C# использовать бы существующие теги 'SQL', 'asp.net', 'C#' и создаст новый тег 'SQL сервер'

/EDIT

или разделить на пространствах и не позволяют метки с пробелами

в вашем примере, как вы говорите, разница между «SQL сервером» (1 тег) и «SQL» «сервер» (2 тега)?

Если вы посмотрите на SO, все метки будут разделены пробелом, поэтому один тег будет sql-server.

Пока у вас есть теги подсказал им, как они вступают им, что я не думаю, что это будет проблемой

+0

в моем первом примере, я разделяю теги запятыми, поэтому могу сказать, что разница. –

+0

, но вы сказали сами, это нехорошее решение. в противном случае, как вы можете определить, представляет ли пользователь сервер asp.net C# sql server, что это не один тег? –

+0

да, это моя проблема ... –

6

StackOverflow имеет точно такую ​​же проблему с пользователями, неправильно ввода тегов, например, если у вас ввел «строковое манипулирование» вместо «манипуляции строкой». Вы только что изменили разделитель тегов от места до запятой.

Основная проблема все та же, так что не удивительно, что решение также и тот же:

  1. Обучение пользователей с помощью удобной помощи на вашем сайте.
  2. Модераторы, которые помогают обойти исправление ошибок других пользователей, очистка сайта.
  3. Модераторы также обучают ваших пользователей, когда они делают ошибки, чтобы в будущем они не совершали такую ​​же ошибку.

StackOverflow доказывает, что эта модель может работать хорошо.Автоматическое решение для исправления ошибок пользователя иногда создает ошибки из-за неоднозначности, которую вы указали сами. Это может помешать людям, которые делают это правильно, только для того, чтобы быть сорванным программным обеспечением, «фиксирующим» их теги для них.

2

Вы можете попробовать статистическийвид подхода: если есть куча вещей, уже отмеченных «sql server», это может сделать обоснованное предположение. Конечно, иногда это бывает неправильно.

9

Есть один (простой) способ, который я могу представить, чтобы позволить вашему пользователю включать любого символа в тег. Это решение позволяет пользователю вводить только один тег за раз. У вас может быть текстовое поле, в которое пользователь вводит тег (автозаполнение для существующих тегов является определенным плюсом), нажатие вводит или кнопку при завершении ввода, а введенные теги отображаются под текстовым полем в списке применяемых тегов. Эти теги должны иметь кнопку для каждого тега, чтобы позволить пользователю удалить тег.

Wordpress имеет аналогичный механизм тегов при создании сообщений, но они позволяют вводить сразу несколько тегов, просто указывая, какой символ ограничивает теги. Требование о разделителе не имеет большого значения, но если вы не хотите указывать конкретный разделитель, вам просто нужно будет ограничить пользователя вводом одного тега за раз.

image of wordpress's tag box

Другая идея (редактировать)

Я только что прочитал это сегодня: Tokenizing Control

0

Мой совет:

Во-первых, впереди, выбрать сразу: сделать вас хотите разрешить теги с пробелами в их именах или нет? Выберите тот или другой, не пытайтесь создать какой-то сумасшедший mish-mash с эвристическим предсказанием о том, означает ли пользователь что-то или другое.

Либо это:

sql server 

всегда означает 1 тег, или всегда означает 2. Просто выберите прямо сейчас, что вы хотите. Один или другой. Если вы должны выбрать, чтобы не допускать пробелов в тегах (это означает, что это 2 метки), но вы также хотите, чтобы позволить пользователям разделять теги запятыми, например:

sql,server 

Тогда вы могли бы иметь дело с пользователем ввода кучу тегов, смешанных, например:

sql server,regular expressions,java c# 

С кодом, как это:

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

, которая поможет вам:

tags[0]: sql 
tags[1]: server 
tags[2]: regular 
tags[3]: expressions 
tags[4]: java 
tags[5]: c# 
Смежные вопросы