我asked this question on meta,但我现在意识到它可能更适合主站点,因为它是一个与任何基于标记的系统相关的一般性问题(我很乐意关闭/删除一个取决于哪里人们认为这个问题应该去了)
我有一个类似的标记数据系统,我遇到了与SOF相同的问题,我有很多标签真的是同一个东西。我正在尝试创建一个类似于SOF的标记同义词页面,以支持组织此信息。
关于标签同义词的关系和“数据模型”的一些问题:
我假设主标记可以有多个同义词标记但是同义词标记只能是一个 一个主标记的同义词。这是对的吗?
此外,主标签也可以是同义词标签吗?例如,假设你有一个名为javascript的标签,你有:
大师:js
同义词:java-script,js-web
大师:javascript
同义词:js
因此,在上面的示例中,您将继续解析以最终将 js-web 解析为 javascript ,因为主标记: js 本身同义词标签。
另外,这让我觉得你也可以遇到一个带有
的循环引用 大师:js
同义词:java-script
和
大师:javascript
同义词:js
系统如何处理循环引用?
答案 0 :(得分:16)
对于关于民众分类,一词多义等的meta,你会有更多的理论答案!由于我在StackOverflow方面回答,我将尝试提供稍微更具技术性的答案。使用StackOverflow Data Explorer运行查询将允许我尝试回答您的问题(我不隶属于StackOverflow,因此我无法确切知道)。
在StackOverflow上,主/同义词标记关系经过仔细stewarded的培养。在从数据资源管理器写入时:
将其与其他民俗分类法进行对比很有意思,一篇文章“Technorati tags: Good idea, terrible implementation”表示。
“Technorati宣称他们现在正在跟踪466,951个不同的标签,当您考虑到典型的字典有大约75,000个条目时,这非常令人印象深刻”
一个快速的警告,我通常编写Oracle SQL,我认为数据资源管理器使用SQLServer,所以我的查询可能有点业余。首先是我对数据的假设:
现在针对您的具体问题:
“我假设主标记可以有多个同义词标记,但同义词标记只能是一个主标记的同义词。这是正确的吗?”
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可能让我失望的地方。问题是我可以找到任何循环引用吗?要做到这一点,我想我需要解决这个问题:
集合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!)。