Gremlin:当它们相似时如何合并顶点组

Gremlin: How can I merge groups of vertices when they are similar

我的查询 returns 组用户顶点如下:

[
    [Pedro, Sabrina, Macka, Fer]
    [Pedro, Sabrina, Macka, Fer, Britney]
    [Brintey, Fred, Christina] 
]

前两组相似,包含大部分相同的顶点。我需要合并它们。 我需要合并相似度为 80% 的组(80% 的元素相同)。

这在 gremlin 中可行吗?我该怎么做?

编辑: https://gremlify.com/2ykos4047g5

这个 gremlify 项目创建了一个类似于我在查询中的伪输出,我需要将前 2 个列表合并为一个列表,因为它们包含几乎相同的顶点而不是第三个,因为和其他的完全不一样。

所以我要问的是你如何编写一个查询来比较所有列表,检查这些列表中有多少顶点是相同的,并据此决定是否将它们合并为一个.

gremlify 项目的预期输出是:

[
  [
    "Pedro",
    "Sabrina",
    "Macka",
    "Fer",
    "Britney"
  ],
  [
    "Garry",
    "Dana",
    "Lily"
  ]
]

Gremlin 没有根据相似程度合并列表的步骤。 Gremlin 相当灵活,所以我想可能有一些方法可以创造性地使用它的步骤来获得你想要的东西,但增加的复杂性可能不值得。我个人的偏好是使用 Gremlin 来检索我的数据,过滤掉任何无关的东西,然后将其转换为尽可能接近最终结果,同时保持与可读性的平衡。

考虑到这种想法,如果您从 Gremlin 得到的结果只是一个字符串列表列表,并且您的 Gremlin 到目前为止结构良好且性能良好,那么也许 Gremlin 已经让您走得够远了,他的工作已经完成了。获取该结果并 post 通过编写一些代码在您的应用程序端处理它以将您带到最终结果。通过这种方法,您可以随意使用完整的编程语言环境和所有可用的库,使最后一步更容易。

我还要补充一点,您的示例有点做作,并且侧重于任意结果,这会将您的 Gremlin 问题简化为集合操作问题。对于图形和 Gremlin,我经常发现为提高结果质量(而不仅仅是结果格式)而高度关注集合操作意味着我应该回到我的遍历算法的核心,而不是尝试进行额外的操作在遍历结束时。

例如,如果您在这个问题中询问的这个输出与您之前的问题相关 and ,那么我想知道您是否不应该重新考虑您的算法规则。也许,正如我在我的一个答案中所说的那样,您真的不是在“检测三角形然后尝试对它们进行相应的分组”。也许有一种完全不同的算法可以解决您的问题,它更加有效和高效。

此博客 post、“Reducing Computational Complexity with Correlate Traversals”在解释这个一般概念方面做得非常出色。虽然它侧重于中心性算法,但一般信息非常明确:

All centrality measures share a similar conceptual theme — they all score the vertices in the graph according to how “central” they are relative to all other vertices. It is this unifying concept which can lead different algorithms to yield the same or similar results. Strong, positive correlations can be taken advantage of by the graph system architect, enabling them to choose a computationally less complex metric when possible.

在您的情况下,您可能需要在为算法声明的规则中有更大的灵活性,从而允许在结果中进行更好(即不那么严格)的分组。无论如何,这是需要考虑的事情,在最坏的情况下,您显然可以采用您在问题中描述的蛮力方法并获得结果。