很想给你一个关于民俗学、多义词等元的更理论的答案!由于我在 StackOverflow 方面进行回答,我将尝试给出一个稍微技术性的答案。使用StackOverflow 数据资源管理器运行查询将允许我尝试回答您的问题(我不隶属于 StackOverflow,所以我不能确定)。
在 StackOverflow 上,主/同义词标签关系经过精心管理和培养。在 Data Explorer 撰写本文时:
- 标签有 29488 行
- TagSynonyms 有 1916 行
将其与其他民间分类法进行对比很有趣,一篇文章“ 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 个标签既是同义词又是主标签
“系统如何处理循环引用?”
这是我的逻辑/SQL 可能让我失望的地方。问题是我能找到任何循环引用吗?为此,我认为我需要解决:
- 设置一组既是主标签又是同义词的标签
- Set b - set a 中标签的同义词的同义词
- 设置 c - 一个交点 b
集合 c 中的任何内容都是循环引用。
我们已经计算了上面的集合 a(它有 465 行)。
Set 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 行
我们可以在这里停下来,因为我们已经知道集合 b 是空的,所以计算集合 c 是没有意义的。
除非我的逻辑或 SQL 错误(这很有可能),否则 StackOverflow 中似乎没有循环引用。我想有一些技术流程可以防止循环引用的发生(否则 StackOverflow 可能会遭受 StackOverflow 的影响!)。