标记层次结构和处理

tzo*_*zot 20 tags tagging hierarchical-clustering

这是一个真正的问题,一般适用于标记项目(是的,这也适用于StackOverflow,不,这不是关于StackOverflow的问题).

整个标记问题有助于聚类类似的项目,无论它们是什么项目(笑话,博客帖子,所以问题等).但是,(通常但不严格)是标签的层次结构,这意味着某些标签也暗示其他标签.使用一个熟悉的例子,"c#"so标签也暗示".net"; 另一个例子,在笑话数据库中,"blondes"标签暗示"嘲弄"标签,类似于"爱尔兰"或"belge"或"加拿大"等,取决于笑话的国家来源.

你是如何在项目中处理这个问题的?我将提供一个答案,描述我在两个不同的情况下使用的两种不同的方法(实际上,相同的机制,但在两个不同的环境中实现),但我不仅对类似机制感兴趣,而且对您对层次结构问题的看法感兴趣.

Yuv*_*l F 7

这是一个棘手的问题.两个极端是本体(一切都是分层的)和一个分类(标签没有层次结构).我已经在WikiAnswers上回答了这个问题,并引用了Clay Shirky的"Ontology is Overrated"一文,声称你应该不设置层次结构.

  • 出于某种原因,我无法在WikiAnswers页面中找到Clay Shirky文章的链接.这是:http://www.shirky.com/writings/ontology_overrated.html.我也喜欢它. (3认同)

tzo*_*zot 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
Run Code Online (Sandbox Code Playgroud)

其中 trlValue 是 (0, 1] 空间中的一个值,用于为每个链接的标签提供重力;自标签关系始终在 trlValue 中携带 1.0,而其余部分是通过算法计算的(不是想想我给出的示例笑话数据库;['blonde', 'derisive', 0.5] 记录将与 ['pondian', 'derisive', 0.5] 相关联,因此建议给出另一个给出的所有嘲笑笑话。