2010-02-10 4 views
9

어떻게 SO와 같은 태깅 시스템을 구축 할 수 있습니까?SO와 같은 태깅 시스템을 만드는 방법은 무엇입니까?

내 asp.net mvc 웹 사이트에서 고유 한 텍스트 상자를 사용하여 "태그"를 제출하고 있습니다.

우선, 태그를 쉼표로 "asp.net, C#, SQL Server"로 분할하려고했습니다. 작동하지만 사용자가 쉼표로 태그를 분리하는 것을 잊어 버린 경우 해당 문자열을 분리하는 데 문제가 있습니다.

"asp.net C# sql server": SQL Server는 두 개의 "sql"+ "server"가 아닌 단일 태그 여야합니다.

또한 내가 (그는 이것에 대해 알아서는 안 ...) "수"를 사용하는 사용자에게 "-"태그의 단어를 분리해서하는 문자 : "SQL 서버"를

누군가가 도와 드릴까요?

+1

그러나 그렇다면 SQL과 서버로 태그하는 방법은 무엇입니까? (그리고 "server sql";)) – Aistina

+0

"sql, server"쉼표로 구분 된 태그를 지정해야합니다 ... –

+0

음, 쉼표로 구분 된 *와 * 공백을 구분할 수 없습니다. 둘 중 하나를 선택해야합니다. 둘 다 장점과 단점이 있습니다. @bebop이 지적했듯이 자동 완성 기능을 제공하는 한별로 중요하지 않다고 생각합니다. – Aistina

답변

5

기존 태그의 문자열과 일치하면 공백이있는 태그를 사용할 수 있습니다 (더 큰 태그를 먼저 검색하면 'sql'을 검색하기 전에 'sql server'를 찾습니다). 기존 태그를 사용하는 것만으로도 견고하고 새로운 태그를 만들기위한 별도의 메커니즘을 사용할 수 있습니다. 이렇게하면 새 태그 상자에 입력 한 내용이 'sql server 2005'와 같은 단일 태그가되므로 공백으로 태그를 쉽게 만들 수 있습니다.

편집 :

가 또는 당신은 새로운 것을 만들기위한 태그 특별한 구문을 할 수 :

'SQL, asp.net, [NEWTAG] SQL 서버는 C#을'태그 'SQL', 'asp.net', 'C# .NET을'기존 사용하는 것이 새로운 태그 'SQL 서버'

를 만들 것/편집

하거나 공간에 분할 (공백 태그

귀하의 예제에서

어떻게 'SQL 서버'(1 개 태그)와 'SQL'서버 '의 차이를 알 수 있습니까 허용하지 않습니다 2 태그)?

그래서 보면 태그는 모두 공백으로 구분되므로 하나의 태그는 sql-server입니다. 당신은 그들이 나는이

+0

첫 번째 예제에서는 쉼표가있는 별도의 태그가 있으므로 차이점을 알 수 있습니다. –

+0

하지만 당신은 스스로에게 말했습니다. 이것은 좋은 해결책이 아닙니다. 그렇지 않으면 사용자가 'asp.net C# sql server'라는 태그를 하나의 태그로 제출하는지 어떻게 알 수 있습니까? –

+0

그래, 그게 내 문제 야 ... –

6

StackOverflow의 당신이 가지고있는 경우 사용자가 잘못 예를 들어, 태그를 입력와 정확히 같은 문제가 문제가 될 것이라고 생각하지 않습니다를 입력하는대로 태그가 그들에게 제안이있는 한

'문자열 조작'대신 '문자열 조작'을 입력했습니다. 방금 태그 구분자를 공백에서 쉼표로 변경했습니다.

근본적인 문제는 여전히 동일합니다, 그래서 해결책도 동일하다는 것을 놀라운 일이 아니다 :

  1. 귀하의 사이트에 편리하게 도움을 통해 사용자를 교육.
  2. 다른 사용자의 실수를 고치고 사이트를 정리하는 중재자입니다.
  3. 중재자는 사용자가 실수를했을 때도 같은 실수를하지 않도록 교육합니다.

StackOverflow는이 모델이 제대로 작동 함을 증명합니다.사용자 오류를 수정하기위한 자동화 된 솔루션은 때로는 스스로 지적한 모호성 때문에 오류 자체를 만듭니다. 이것은 소프트웨어가 자신의 태그를 "고칠"수있는 경우에만 올바르게 작동하는 사람들을 좌절시킬 것입니다.

2

통계적인 접근 방법을 시도해보십시오. "SQL Server"라는 태그가 이미있는 항목이 많으면 교육적인 추측을 할 수 있습니다. 물론, 때때로 잘못 이해하게 될 것입니다.

9

사용자가 태그에있는 모든 문자를 포함시킬 수있는 한 가지 방법이 있습니다. 그 해결책은 사용자가 태그 하나만 입력 할 수있게하는 것입니다. 사용자가 태그를 입력하는 텍스트 상자를 가질 수 있습니다 (기존 태그에 대한 자동 완성은 명확한 플러스입니다). 입력이 끝나면 입력 또는 버튼을 누르고 입력 된 태그가 적용된 태그 목록의 텍스트 상자 아래에 나타납니다. 적용된 태그에는 사용자가 태그를 제거 할 수 있도록 각 태그에 대한 버튼이 있어야합니다.

워드 프레스은 게시물을 만들 때 유사한 태그 지정 메커니즘을 가지고 있지만 태그를 구분하는 문자를 간단히 설명하여 여러 태그를 한꺼번에 입력 할 수 있습니다. 구분 기호를 요청하는 것은 큰 문제는 아니지만 특정 구분 기호를 사용하지 않으려면 사용자가 한 번에 하나의 태그 만 입력하도록 제한하면됩니다.

image of wordpress's tag box

또 다른 아이디어 난 그냥이 오늘 읽을

(편집) : Tokenizing Control

0

내 조언 :

첫째, 정면, 바로 선택 : 당신을 이름에 공백이있는 태그를 허용하고 싶지 않습니까? 하나 또는 다른 것을 선택하고, 사용자가 한 가지 또는 다른 것을 의미하는지 여부에 대한 경험적 예측을 사용하여 미친 짓을 만들지 마십시오.

어느 쪽이 :

sql server 

항상 1 개 태그를 의미, 또는 항상 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# 
관련 문제