标签层次结构和处理
Posted
技术标签:
【中文标题】标签层次结构和处理【英文标题】:Tag hierarchies and handling of 【发布时间】:2010-09-12 08:20:11 【问题描述】:这是一个真正的问题,通常适用于标记项目(是的,这也适用于 ***,不,这不是关于 *** 的问题)。
整个标记问题有助于聚集相似的项目,无论它们可能是什么项目(笑话、博客文章、问题等)。但是,存在(通常但不严格)标签的层次结构,这意味着某些标签也暗示其他标签。举一个熟悉的例子,“c#”so 标签也暗示“.net”;另一个例子,在笑话数据库中,“金发女郎”标签意味着“嘲笑”标签,类似于“爱尔兰”或“比利时”或“加拿大”等,具体取决于笑话的国家/地区。
在您的项目中,如果有的话,您是如何处理的?我将提供一个答案,描述我在两种不同情况下使用的两种不同方法(实际上,相同的机制但在两种不同的环境中实现),但我不仅对类似的机制感兴趣,而且对您对层次结构问题的看法也感兴趣.
【问题讨论】:
【参考方案1】:这是一个棘手的问题。两个极端是本体(一切都是分层的)和民俗(标签没有分层)。我有answered this on WikiAnswers,参考了 Clay Shirky 的“Ontology is Overrated”文章,该文章声称您不应该设置任何层次结构。
【讨论】:
Clay Shirky 的文章非常有趣。显然,引入邻近因子(在数据库示例中)是为了软化相关术语(在文章示例中的“同性恋”和“酷儿”)。 由于某种原因,我在 WikiAnswers 页面中找不到 Clay Shirky 文章的链接。这是:shirky.com/writings/ontology_overrated.html。我也喜欢。【参考方案2】:实际上我会说它不是一个层次系统,而是一个语义网,标签含义之间存在距离。我的意思是:数学更接近于实验物理学,然后更接近于园艺。
构建这样一个网络的可能性:构建标签对并让人们判断感知距离(使用 1-10 之类的度量,意思是 [同义词,相似,...,反义词],...)和搜索时,搜索一定距离内的所有标签。
如果来自相反方向([a,b] close -> [b,a,] close),测量是否必须是相等的距离?或者接近是否意味着 [a,b] 关闭和 [b,c] 关闭 -> [a,b] 关闭?
也许第一个词会默认触发另一个语义场?如果你从“社会工作者”开始,“分析师”就在附近。如果你从“程序员”开始,“分析师”也很近。但从以上任何一点开始,您可能都不会将另一个视为接近(“社会工作者”绝不接近“程序员”)。
因此,您只能在两个方向(以随机顺序)进行判断和判断。
[TagRelations]
tagId integer
closeTagId integer
proximity integer
相似标签选择示例:
select closeTagId from TagRelations where tagId = :tagID and proximity < 3
【讨论】:
接近是单向的;如果它应该是双向的,那么将插入具有不同接近度的不同记录。 @malach:作为一个用户体验问题,关于层次结构的使用,我想说(i)软件应该使用你描述的基于数学的语义网络方法,但是(ii)想要的用户应该允许对他们的个人标签集合进行“园艺”,而不是强制将标签排列成层次结构,因为一些用户会觉得这是比平面列表更舒服。在标签的“个性化”毫无疑问的软件系统中,可以使用平面列表,除非领域专家另有规定。【参考方案3】:我实现的机制是不使用给定的标签,而是使用间接查找表(不是严格的 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,而其余的则通过算法计算(确切程度并不重要)。想想我给出的示例笑话数据库;一个 ['blonde', 'derisive', 0.5] 记录将与 ['pondian', 'derisive', 0.5] 相关联,因此建议所有嘲讽的笑话给另一个。
【讨论】:
以上是关于标签层次结构和处理的主要内容,如果未能解决你的问题,请参考以下文章