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

leo*_*ora 11 tags synonym

我在meta上问了这个问题,但我现在意识到它可能更适合主站点,因为它是一个与任何基于标记的系统相关的一般性问题(我很乐意根据人们的想法关闭/删除一个)问题应该去)


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

关于标签同义词的关系和"数据模型"的几个问题:

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

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

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

你还可以:

大师:javascript
同义词:js

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

此外,这让我觉得你也可以遇到一个循环引用,你有一个

主人:js
同义词:java-script

和

大师:javascript
同义词:js

系统如何处理循环参考?

Mar*_*ren 16

对于关于民众分类,一词多义等的元,你很有可能给出一个更理论的答案!由于我在StackOverflow方面回答,我将尝试提供稍微更具技术性的答案.使用StackOverflow数据资源管理器运行查询将允许我尝试回答您的问题(我不隶属于StackOverflow,因此我无法确切知道).

在StackOverflow上,主/同义词标记关系经过仔细的管理和培养.在从Data Explorer写入时:

  • 标签有29488行
  • TagSynonyms有1916行

有趣的是将其与其他民俗分类法进行对比,一篇文章" Technorati标签:好主意,可怕的实施 "说明.

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

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

  • Tags表中列出的任何内容都是"主标记".
  • 在TagSynonyms表中,TargetTagName是"主标记",SourceTagName是"同义词标记".

现在来看你的具体问题:

"我假设主标签可以有多个同义词标签,但同义词标签只能是一个主标签的同义词.这是正确的吗?"

select * from TagSynonyms where TargetTagName = 'javascript'
Run Code Online (Sandbox Code Playgroud)

结果:是的.主标记可以具有多个同义标记.

select SourceTagName, count(*) from TagSynonyms group by SourceTagName having count(*) > 1
Run Code Online (Sandbox Code Playgroud)

结果:是的.同义词标记只能是一个主标记的同义词.

"另外,主标签也可以是同义词标签吗?"

select TagName from Tags
intersect
select SourceTagName from TagSynonyms
Run Code Online (Sandbox Code Playgroud)

结果:是的.主标记也可以是同义标记.当我运行此查询时,有465个标签同时是同义词和主人

"系统如何处理循环引用?"

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

  • 设置一组 - 主要和同义词的标签
  • 设置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
))
Run Code Online (Sandbox Code Playgroud)

结果: 0行

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

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