Php 隐性关系

Php 隐性关系,php,algorithm,graph,social-networking,data-mining,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)

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

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

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)
等等。

转换为图形 用标记描述的是一个图,它的节点是标记,顶点是关系。如果需要,您可以阅读以下维基百科页面:

您还可以阅读这篇文章,更侧重于图形的实现:

您想知道的是,两个标记(在一个图中,两个节点)是否相关,但不是直接相关(在同一个类中,但不是邻居)

图的实现 您可以自己编写代码,或者寻找一个已经运行的好实现。 举个例子:(不知道它是否真的很好,只是在github上搜索并得到第一个结果)

自己实现图形可能是一个很好的培训。我认为OOP是最好的方法

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

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

一个简单的解决方案是保留一个已访问节点的数组。从一个节点开始,将该节点设置为已访问,并将其所有邻居添加到可访问节点数组中。然后你对所有的邻居做同样的事情。当您遇到一个已经访问过的节点时,您什么也不做(否则将得到一个无限循环)。当算法停止时,您将拥有一个包含起始标记中所有可访问标记的数组


希望这有帮助,我会等待你的回答,看看你是否需要其他东西。考虑到这个算法可能已经在我链接的线索/图形库中实现了。

是关系导向的吗?在你的例子中,你有k->a吗?到目前为止你试过什么吗?我正在使用中间cSo获取它们之间的关系a->k和k->a是相同的关系吗?谢谢,首先,我需要知道如何构建算法来提取隐藏关系并获取标签之间所有可能的关系,之后,我有自己的算法将结果可视化为图形。您希望接收什么数据结构来表示标记之间可能的关系?感谢您的重放,我自己的数据建立在数组中。例如数组(4){[711]=>array(5){[0]=>string(1)“a”[1]=>string(1)“B”[2]=>string(1)“C”}[710]=>数组(6){[0]=>字符串(1)“C”[1]=>字符串(1)“K”[2]=>字符串(1)“M”}[114]=>数组(2){[0]=>字符串(1)“M”[1]=>字符串(1)“N”[1]=>字符串(1)“P”}其中索引是文档id,如711,但这是您的输入数据。您的输出数据如何?在您的示例中,结果如何?