如何构建像SO这样的标记系统?
我在asp.net mvc网站上使用了一个独特的文本框来提交“标签”。
首先,我尝试用逗号“asp.net,c#,sql server”分割标签。 它有效,但如果用户忘记用逗号分隔标签,我就有问题要拆分该字符串。
“asp.net c#sql server”:sql server应该是单个标签,而不是两个“sql”+“server”。
此外我“不能”(他不应该关心这个......)要求用户使用“ - ”字符分隔标签的单词:“sql-server”
有人帮忙吗?
答案 0 :(得分:9)
我可以想到一种(简单)方式允许用户在标记中包含任何字符。该解决方案是允许用户一次只输入一个标记。你可以有一个用户输入标签的文本框(现有标签的自动完成是一个明确的优点),完成输入时按回车键或按钮,输入的标签显示在应用标签列表的文本框下方。这些应用标签必须为每个标签设置一个按钮,以便用户可以删除标签。
创建帖子时,Wordpress 具有类似的标记机制,但只需说明哪些字符分隔标记,就可以一次输入多个标记。要求分隔符并不是什么大问题,但如果您不想强制使用特定分隔符,则只需要限制用户一次输入单个标记。
另一个想法(编辑)
我今天刚读完这篇文章:Tokenizing Control
答案 1 :(得分:6)
StackOverflow与用户错误输入标签的问题完全相同,例如,如果您输入了“字符串操作”而不是“字符串操作”。您刚刚将标记分隔符从空格更改为逗号。
根本问题仍然是一样的,所以解决方案也是一样的并不奇怪:
StackOverflow证明这个模型可以很好地工作。由于您自己指出的含糊不清,用于纠正用户错误的自动化解决方案有时会产生错误。这会让正在正确行事的人感到沮丧,只会被软件“修复”他们的标签所挫败。
答案 2 :(得分:5)
要么匹配现有标签的字符串,那么你可以使用带空格的标签(假设你首先搜索更大的标签,这样你就可以在搜索'sql'之前找到'sql server'。你可以让它更健壮通过仅允许使用现有标签,并且具有用于创建新标签的单独机制。这样,用户可以容易地创建具有空格的标签,因为在新标签框中输入的任何内容将是单个标签,如“sql server 2005”。 / p>
编辑:
或者,您可以在标签中使用一些特殊语法来创建新语法:
'sql,asp.net,[NEWTAG] sql server,c#'将使用现有标签'sql','asp.net','c#'并创建一个新标签'sql server'
/ EDIT
或者您在空格上拆分并且不允许带空格的标记
在你的例子中,你如何区分'sql server'(1标签)和'sql''server'(2个标签)?
如果你看SO标签是空格分隔的,那么一个标签是sql-server。
只要您在输入标签时向他们建议标签,我认为这不会是一个问题
答案 3 :(得分:2)
您可以尝试一种统计spelling correction方法:如果有一堆东西已经标记为“sql server”,那么它可以做出有根据的猜测。当然,有时会出错。
答案 4 :(得分:0)
我的建议:
首先,在前面,立即选择:您是否要允许带有名称空格的标签?选择其中一个,不要尝试用启发式预测来创建一些疯狂的混搭,关于用户是否意味着一件事。
要么:
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#