隐藏的关系

时间:2015-03-14 14:25:58

标签: php algorithm graph social-networking data-mining

如何找到从多个文档中提取的标签之间的所有隐藏关系?

我的数据集基于一组文档,每个文档都是从标记组中提取的,我的任务是查找来自不同文档的不同标记之间的关系:

Doc_id        tags
  1         a, b, c
  2         c, k, m
  3         m, n, p

隐藏关系的结果应为:

a -> k  using c
b -> m  using c
a -> n  using c, m (a->c->m->n)

等等。

1 个答案:

答案 0 :(得分:0)

翻译成图表

您用标记描述的是一个图形,其节点将是您的标记,并且您的关系是顶点。如果您愿意,可以阅读以下维基百科页面:

https://en.wikipedia.org/wiki/Graph_theory

您还可以阅读本文,更侧重于图表的实施:

https://en.wikipedia.org/wiki/Graph_(abstract_data_type)

你想知道的是两个标签(在图中,两个节点)是否相关,但不是直接相关(在同一个类中,而不是相邻的)。

图表的实施

您可以自己编写代码,或者寻找已经正常工作的良好实现。 这个例如:https://github.com/clue/graph(不知道它是否真的很好,只是在github上搜索并取得了第一个结果)。

自己实施图表可以很好的培训。我认为OOP是最好的方法。

获得答案

您现在需要知道两个标签之间是否有道路。在您的示例中,每个标记都有一条通往另一个标记的道路,但情况并非总是如此。

在图中搜索路径不是一个简单的算法,实现可能很难。有很多方法可以做到。

一个天真的解决方案是保留一组已访问过的节点。您从节点开始,将此节点设置为 visited ,并将其所有邻居添加到可访问节点的数组中。然后你和所有的邻居做同样的事情。当您遇到已访问过的节点时,您不会执行任何操作(否则您将获得无限循环)。当算法停止时,您的开始标记中包含所有可访问标记的数组。

希望有所帮助,我会等你的回答,看看你是否还需要别的东西。请注意,此算法可能已在我链接的线索/图形存储库中实现。