Какова модель данных, используемая для тегов и синонимов тегов?

I задал этот вопрос по метафайлу, но теперь я понимаю, что он может быть более подходящим для основного сайта, поскольку это общий вопрос, который будет касаться любых тегов (я рад закрыть/удалить один в зависимости от того, где люди думают, что этот вопрос должен идти)


У меня есть подобная система помеченных данных, и я столкнулся с той же проблемой, что и SOF, где у меня много тегов, которые на самом деле то же самое. Я пытаюсь создать страницу синонима тега, подобную SOF, для поддержки организации этой информации.

Несколько вопросов вокруг отношений и "модели данных" синонимов тегов:

Я предполагаю, что основной тег может иметь несколько тегов синонимов, но тег синонима может быть только синоним одного основного тега. Это правильно?

Кроме того, может ли основной тег быть тегом синонима? Например, скажем, у вас есть тег под названием javascript, и у вас было:

Мастер: js
Синонимы: java- script, js-web

у вас также есть:

Мастер: javascript
Синонимы: js

Итак, в приведенном выше примере вы бы решили разрешить в конечном итоге разрешить js-web javascript, потому что главный тег: js тег синонима.

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

Мастер: js
Синонимы: java- script

и

Мастер: javascript
Синонимы: js

Как система обрабатывает круговые ссылки?

Ответ 1

Заманчиво дать вам более теоретический ответ на мета в отношении фольклонов, многозначности и тому подобного! Поскольку я отвечаю на стороне StackOverflow, я попытаюсь дать немного более технический ответ. Выполнение запросов с помощью StackOverflow Data Explorer позволит мне попытаться ответить на ваши вопросы (я не связан с StackOverflow, поэтому я не могу знать конечно).

В StackOverflow отношение тэга master/synonym тщательно stewarded и культивируется. Во время записи из проводника данных:

  • Тэги имеют 29488 строк
  • TagSynonyms имеет 1916 строк

Интересно сравнить это с другими folksonomies, в одной из статей "" Теги Technorati: хорошая идея, ужасная реализация".

"Technorati рекламирует, что теперь они отслеживают 466 951 разные теги, что довольно впечатляет, если учесть, что обычный словарь содержит около 75 000 записей"

Быстрое предостережение, я обычно пишу Oracle SQL, и я предполагаю, что Data Explorer использует SQLServer, поэтому мои запросы могут быть немного любительскими. Во-первых, мои презумпции в отношении данных:

  • все, что указано в таблице тегов, является "основным тегом".
  • в таблице TagSynonyms TargetTagName является "основным тегом", SourceTagName является "тегом синонима".

Теперь к вашим конкретным запросам:

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

select * from TagSynonyms where TargetTagName = 'javascript'

Результат: Да. Мастер-тег может иметь несколько тегов синонимов.

select SourceTagName, count(*) from TagSynonyms group by SourceTagName having count(*) > 1

Результат: Да. Тег синонима может быть синонимом только одного основного тега.

"Также может ли основной тег быть тегом синонима?"

select TagName from Tags
intersect
select SourceTagName from TagSynonyms

Результат: Да. Главный тег также может быть синонимом. Когда я запускал этот запрос, было 465 тегов, которые были как синонимами, так и master

"Как система справляется с круговыми ссылками?"

Здесь моя логика /SQL может подвести меня. Вопрос в том, можно ли найти любые циркулярные ссылки? Для этого я думаю, что мне нужно разобраться:

  • Установить a - набор тегов, которые являются как основным, так и синонимом
  • Установить b - синонимы синонимов тегов в наборе a
  • Установить c - пересечение b

Все, что в наборе c будет круговой ссылкой.

Мы уже рассчитали множество выше (оно имеет 465 строк).

Установите b - синонимы синонимов set a

select SourceTagName from TagSynonyms where TargetTagName in (
select SourceTagName from TagSynonyms where TargetTagName in (
select TagName from Tags
intersect
select SourceTagName from TagSynonyms
))

Результат: 0 строк

Мы можем остановиться здесь, нет смысла разрабатывать набор c, поскольку мы уже знаем, что set b пуст.

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