1

我想匹配给定模式库中的模式,返回检测到的最长模式。

但是,我在日志文件中只有多个并行任务的交错结果,例如来自处理器的多个内核。

这是数据挖掘中的已知应用程序吗?

我想到了一种与Regex subsequence matching类似的正则表达式解决方案。然而,有一种距离度量来允许一些模糊性会很好,例如,如果序列中的一个活动会丢失。

序列示例

4

3 回答 3

1

正如其他人所指出的那样,如果我们了解您要完成的工作的语义,这将有所帮助。我在这里猜测您的模式库中的模式都与

  • 单一资源(或)
  • 一组资源

如果是这种情况,我建议您首先将该信息添加到您的模式库中以使其明确。例如,您的模式库看起来像:

1: A
1: AB
1: ABC
2: AD
2: C
2: D

如果你想涵盖一组资源的模式,它可能看起来像这个人为的例子:

3: X
4: Y
3,4: Z

现在,您可以从交错的日志文件中分离出与每个资源相关的日志记录(假设日志文件确实具有资源标识符)。然后,您可以应用模式匹配来发现最长的模式。

本质上,将您的关注点分开并为每个子问题应用解决方案。

于 2020-08-24T18:59:45.970 回答
0

您有一个很容易描述的问题,如果我们知道您的限制条件会很好。这需要运行多快?

在 Python 中,您将在资源上使用一个迭代器,将每个资源推送到一个单独的生成器以进行模式匹配。也就是说,迭代器产生(resource 1, A)并被推送到资源 1 的生成器中,以查看它是否与模式匹配。生成器偶尔会踢出匹配的模式。

在实践中,您可能只需要一个 Splunk 插件或将所有内容放入数据库中。这种类型的分析用于常见问题,例如“查找所有客户,您在过去两周内进行了 3 次会话,但放弃了购物车,购物车中的一个常见商品占总数的 75% 以上。向这个临时客户发送5% 折扣 24 小时有效。”

于 2020-08-24T18:28:41.940 回答
0

如果我们有日志文件和模式库,我们可以解决堆栈问题。我们开始从日志文件中读取。如果带有堆栈的新日志在模式库中创建了现有模式,我们将其推送到堆栈中。除非,我们把它放在一个新的堆栈中。请发送您的评论以完成答案的详细信息。

于 2020-08-19T19:12:33.300 回答