Python 如何检测交错日志文件中的序列

Python 如何检测交错日志文件中的序列,python,algorithm,pattern-matching,data-mining,sequencematcher,Python,Algorithm,Pattern Matching,Data Mining,Sequencematcher,我想匹配给定模式库中的模式,返回检测到的最长模式 但是,我在一个日志文件中只有多个并行任务的交错结果,例如来自处理器的多个内核 这是数据挖掘中已知的应用程序吗 我想到了一个与regex类似的解决方案。然而,有一种距离度量来允许一些模糊性是很好的,例如,如果序列中缺少一个活动 如果我们有日志文件和模式库,我们可以解决堆栈问题。 我们开始读取日志文件。如果带有堆栈的新日志在模式库中创建了现有模式,我们将其推送到堆栈中。除非我们把它放在一个新的堆栈中。请发送您的评论以完成答案的详细信息。您有一个易于描

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

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

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

我想到了一个与regex类似的解决方案。然而,有一种距离度量来允许一些模糊性是很好的,例如,如果序列中缺少一个活动


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

您有一个易于描述的问题,如果我们知道您的限制,那将是一件好事。这需要运行多快

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


实际上,您可能只需要一个Splunk插件,或者将所有内容都放到数据库中。这种类型的分析用于常见问题,如“查找所有客户您在过去两周内参加了三次会议,但放弃了购物车,购物车中有一个普通项目超过了总金额的75%。将此信息发送给临时客户,在24小时内享受5%的折扣。”

正如其他人所指出的,如果我们能理解你想要实现的目标的语义,这会有所帮助。我在这里猜测,您的模式库中的模式都与

  • 单个资源(或)
  • 一套资源
如果是这种情况,我建议您首先将该信息添加到模式库中,使其显式化。例如,您的模式库如下所示:

1: A
1: AB
1: ABC
2: AD
2: C
2: D
如果您想涵盖一组资源的模式,它可能会像下面这个人为的例子:

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


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

我怀疑这是一个NP难问题。你喜欢贪婪的解决方案,还是计算上不可行的解决方案?正则表达式可以做很多事情,但解开蛋糕不是其中之一。这里真正的解决方案是为每个线程创建单独的日志文件,并针对每个线程进行匹配。如果交错无法处理,那么请提供更多关于令牌的详细信息,因为我怀疑您上面给出的示例被严重抽象到任何涉及正则表达式的答案对您都是无用的。(1)。你能更清楚地说明你期望的距离度量吗?(2). 您期望的是“最长”的匹配模式,那么为什么在
预期检测模式中有两个结果,不应该只有
ABC
?如果您不能创建单独的日志文件,当然可以尝试使用每条消息的相关信息(资源#,核心#)扩展日志消息。