Как построить систему тегов, как SO? - PullRequest
9 голосов
/ 11 февраля 2010

Как построить систему тегов, как SO?

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

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

"asp.net c # sql server": sql server должен быть одним тегом, а не двумя "sql" + "server".

Более того, я "не могу" (он не должен заботиться об этом ...) попросить пользователя использовать символ "-" для разделения слов тега: "sql-server"

Кто-нибудь поможет?

Ответы [ 5 ]

9 голосов
/ 11 февраля 2010

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

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

image of wordpress's tag box

Другая идея (правка)

Я только что прочитал это сегодня: Управление токенами

6 голосов
/ 11 февраля 2010

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

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

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

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

5 голосов
/ 11 февраля 2010

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

EDIT:

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

'sql, asp.net, [NEWTAG] sql server, c #' будет использовать существующие теги 'sql', 'asp.net', 'c #' и создаст новый тег 'sql server'

/ EDIT

или вы разделены пробелами и не допускаете теги с пробелами

в вашем примере, как определить разницу между 'sql server' (1 тег) и 'sql' 'server' (2 тега)?

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

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

2 голосов
/ 11 февраля 2010

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

0 голосов
/ 30 октября 2010

Мой совет:

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

Либо это:

sql server

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

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#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...