在hex文件中查找模式

时间:2012-02-15 08:39:23

标签: artificial-intelligence machine-learning data-mining text-mining pattern-recognition

我有两个不同的文件,每个文件的内容来自不同的数据流。我从两个不同的文件中收集了这些流的一些数据。然后我想搜索文件以找到任何类型的模式,所以在稍后阶段,如果我从流中收集更多数据,我应该能够区分哪些数据属于哪个流(基于我找到的模式)更早)。

文件中包含的数据示例可以是:b0 82 91 a2 c3 89 b0 82 4a e3 ....(更多字节)...... 虽然我在这里占用了很少的字节,但我们可以找到两次以上的模式“b0 82”。所以输出应该显示模式和它来的次数。类似地,我们可以有3字节模式或更多字节模式。

还有一个例子可以是:aa 00 a7 2f 7b 4c ....(更多字节)..... aa 01 a7 .........(更多字节)...... aa 05 a7 ..... 我认为即使这可以被认为是一个3字节的模式,其中两个字节(aa和a7)是固定的,而中间的一个从00到05不等。

这是我能想到的两个例子,尽管可能有更多的模式。即使可能存在一些无法立即可视化的隐藏模式。整个想法是任何模式都可以做到,只要这有助于在稍后阶段区分两个流。我想我现在更明确地指出我的问题了。请让我知道以下事项:

  1. 我们如何进行此类模式发现?

  2. 是否有任何工具或库可以帮助实现此目的?

  3. 还使用哪种语言或工具进行有效和快速的开发?

  4. 数据挖掘领域可以帮助实现这一目的吗?如果是,如何继续?

4 个答案:

答案 0 :(得分:1)

这似乎是一个非常典型的ngram发现问题。这是一些ngram解决方案的链接。

quicker way to detect n-grams in a string?

你应该像对待任何其他字符串那样对待你的十六进制。

答案 1 :(得分:0)

您可以在流上训练Markov Models甚至隐藏马尔可夫模型,并使用这些模型来确定最有可能属于哪些新数据流。据说有数十个库可以用您选择的编程语言来实现。

也许从读一本书开始。我建议C. Bishop Pattern Recognition

答案 2 :(得分:-1)

这是另一个想法。它是否适合您取决于您​​正在处理的数据量,可以使用的内存量,以及它检测到的模式类型是否最终用于您的目的。

考虑到所有这些资格,您可能想尝试使用后缀树后缀数组。特别是对于后缀树,有一些算法可以让您在向文本追加字符时不断更新树(所谓的在线后缀树构造),最着名的是Ukkonen算法。这可能对数据流的使用特别有效(与固定长度,完全定义的输入文本相反)。

后缀树(以及类似的方式,后缀数组)表示文本的所有后缀(在字符串结尾的意义上,而不是语言后缀)。因此,它特别适合于(a)检查任何给定的字符串是否是文本的子字符串,以及(b)用于检测文本中的重复的子字符串。通过对正确的位置进行一些修改,它可用于检测重复的子串,并进行轻微的更改(就像您在中间交换一个字符时重复的模式示例一样)。

要全面了解这些数据结构,如果您可以访问大学图书馆或有钱,Dan Gusfield's introduction to algorithms on strings, trees and sequences将非常有用。但是在SO上也有很多与此相关的问题和答案。

如果在进一步阅读后,您认为值得一试,我可以进一步详细说明我认为后缀树可以用于您的目的,以回答一个新问题,特别是关于这些算法的重复使用模式检测。

答案 3 :(得分:-2)

您的问题尚未完全定义,但我会尽量给您一些指示:

  1. 您的模式可能表达为正则表达式。如果您不知道这些是什么 - 我会尝试用您最喜欢的编程语言寻找一个具体的例子。 Python是一个很好的选择(re模块包含在核心语言中)。对于C ++,请使用boost :: regex,对于其他语言,请使用google:)

  2. 现在 - 要使用正则表达式来搜索二进制文件(十六进制)而不是文本,请尝试查看this之类的内容。

  3. 祝你好运:)