这是一个真正适用于标记项目的问题(是的,这也适用于StackOverflow,不,这不是关于StackOverflow的问题)。
整个标记问题有助于聚类类似的项目,无论它们是什么项目(笑话,博客帖子,所以问题等)。但是,(通常但不严格)是标签的层次结构,这意味着某些标签也暗示其他标签。使用一个熟悉的例子,“c#”so标签也暗示“.net”;另一个例子,在笑话数据库中,“blondes”标签暗示“嘲弄”标签,类似于“爱尔兰”或“belge”或“加拿大”等,取决于笑话的国家来源。
如果你有,你在项目中如何处理?我将提供一个答案,描述我在两个不同的情况下使用的两种不同的方法(实际上,相同的机制,但在两个不同的环境中实现),但我不仅对类似机制感兴趣,而且对您对层次结构问题的看法感兴趣
答案 0 :(得分:6)
这是一个棘手的问题。两个极端是本体(一切都是分层的)和一个分类(标签没有层次结构)。我有answered this on WikiAnswers,其中提到Clay Shirky的“Ontology is Overrated”一文,声称你不应该设置层次结构。
答案 1 :(得分:4)
实际上我会说,它不是一个分层系统,而是一个语义网,在标签意义之间感觉不一样。我的意思是:数学更接近实验物理学,然后更接近园艺。
构建这样一个网络的可能性:构建标签对并让人们判断感知距离(使用像1-10这样的度量,意思是[同义词,类似,......,反义词],...)和搜索时,搜索一定距离内的所有标签。
如果来自对位方向([a,b]关闭 - > [b,a,]关闭),度量必须是相等的距离吗?或者接近意味着[a,b]关闭和[b,c]关闭 - > [a,b]关闭?
也许第一个单词默认会触发另一个语义字段?如果你从“社会工作者”开始,“分析师”就在附近。如果从“程序员”开始,“分析师”也在附近。但从这些点开始,你可能不会把另一个算在附近(“sozial worker”绝不接近“程序员”)。
因此,您只能在两个方向(按随机顺序)判断和判断对。
[TagRelations]
tagId integer
closeTagId integer
proximity integer
选择类似标签的示例:
select closeTagId from TagRelations where tagId = :tagID and proximity < 3
答案 2 :(得分:2)
我实现的机制是不使用自己给出的标签,而是使用间接查找表(不是严格的DBMS术语)将标签链接到许多隐含标签(显然,标签与自身链接以使其工作)
在python项目中,查找表是一个用标签键入的字典,带有值集标签(其中标签是纯字符串)。
在数据库项目中(无论哪个是RDBMS引擎),都有以下表格:
[Tags]
tagID integer primary key
tagName text
[TagRelations]
tagID integer # first part of two-field key
tagID_parent integer # second part of key
trlValue float
其中trlValue是(0,1)空间中的值,用于为每个链接标记赋予重力;自我标记关系在trlValue中始终带有1.0,而其余的通过算法计算(这究竟是多么重要)。想想我给出的笑话数据库;一个['金发','嘲弄',0.5]记录与['池塘','嘲讽',0.5]相关,因此暗示所有嘲笑的笑话另一个。