用于标签和标签同义词的数据模型是什么?

时间:2011-08-30 14:52:32

标签: tags synonym

asked this question on meta,但我现在意识到它可能更适合主站点,因为它是一个与任何基于标记的系统相关的一般性问题(我很乐意关闭/删除一个取决于哪里人们认为这个问题应该去了)


我有一个类似的标记数据系统,我遇到了与SOF相同的问题,我有很多标签真的是同一个东西。我正在尝试创建一个类似于SOF的标记同义词页面,以支持组织此信息。

关于标签同义词的关系和“数据模型”的一些问题:

我假设主标记可以有多个同义词标记但是同义词标记只能是一个 一个主标记的同义词。这是对的吗?

此外,主标签也可以是同义词标签吗?例如,假设你有一个名为javascript的标签,你有:

大师:js
同义词:java-script,js-web

你能拥有:

大师:javascript
同义词:js

因此,在上面的示例中,您将继续解析以最终将 js-web 解析为 javascript ,因为主标记: js 本身同义词标签。

另外,这让我觉得你也可以遇到一个带有

的循环引用

大师:js
同义词:java-script

大师:javascript
同义词:js

系统如何处理循环引用?

1 个答案:

答案 0 :(得分:16)

对于关于民众分类,一词多义等的meta,你会有更多的理论答案!由于我在StackOverflow方面回答,我将尝试提供稍微更具技术性的答案。使用StackOverflow Data Explorer运行查询将允许我尝试回答您的问题(我不隶属于StackOverflow,因此我无法确切知道)。

在StackOverflow上,主/同义词标记关系经过仔细stewarded的培养。在从数据资源管理器写入时:

  • 标签有29488行
  • TagSynonyms有1916行

将其与其他民俗分类法进行对比很有意思,一篇文章“Technorati tags: Good idea, terrible implementation”表示。

“Technorati宣称他们现在正在跟踪466,951个不同的标签,当您考虑到典型的字典有大约75,000个条目时,这非常令人印象深刻”

一个快速的警告,我通常编写Oracle SQL,我认为数据资源管理器使用SQLServer,所以我的查询可能有点业余。首先是我对数据的假设:

  • Tags表中列出的任何内容都是“主标记”。
  • 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个标签同时为同义词和主

“系统如何处理循环引用?”

这是我的逻辑/ SQL可能让我失望的地方。问题是我可以找到任何循环引用吗?要做到这一点,我想我需要解决这个问题:

  • 设置一组 - 主要和同义词的标签
  • 设置b - set 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行

我们可以在这里停下来,因为我们已经知道set b是空的,所以没有必要设置c。

除非我的逻辑或SQL错误(这是非常可能的),否则StackOverflow中似乎没有循环引用。我认为有一些技术流程可以防止循环引用的发生(否则StackOverflow可能会遭受StackOverflow!)。