C# 相似模式识别

C# 相似模式识别,c#,vb.net,algorithm,search,find,C#,Vb.net,Algorithm,Search,Find,我正试图用一个软件来帮助操作员,使工作流过程自动化。 操作员查看从二进制日志文件读取的字节序列生成的图表,如果他识别出某些特定模式(以线条的形式或形状;图表是2d线条),他必须做一些事情 我已经能够获取日志并找到这些模式,如果它们完全匹配(我使用的是字符串搜索算法),但我不知道如何检测仅部分匹配或类似的模式。 一些典型情况可能是: 1我正在寻找的模式存在,但只包含一些字节,即 1a-2b-e1-1b-1a-8c代替1a-2b-e1-0b-1a-8c 2我正在寻找的模式存在,但有一个偏移量,如 1

我正试图用一个软件来帮助操作员,使工作流过程自动化。 操作员查看从二进制日志文件读取的字节序列生成的图表,如果他识别出某些特定模式(以线条的形式或形状;图表是2d线条),他必须做一些事情

我已经能够获取日志并找到这些模式,如果它们完全匹配(我使用的是字符串搜索算法),但我不知道如何检测仅部分匹配或类似的模式。
一些典型情况可能是:

1我正在寻找的模式存在,但只包含一些字节,即
1a-2b-e1-1b-1a-8c代替1a-2b-e1-0b-1a-8c

2我正在寻找的模式存在,但有一个偏移量,如
1a-2b-e1代替10-2a-e0

3 1和2的混合


有人知道这样做的方法吗?我在vb.net中工作,但任何输入都会有所帮助。

有几点可能值得一看:

假设我们的模式是
01-23-45-67-89-A1

二进制日志中可能出现的命中结果如下:
02-23-46-66-00-89-A1

计算绝对差值时会发生什么情况?
01-00-01-01-89-18

假设我们定义了一个每字节01的阈值,接受的字节用XX表示,拒绝的字节用RR表示。。。什么会被接受和拒绝?
XX-XX-XX-XX-RR-RR

现在RR开始的索引很有趣。。。如果我们在日志中跳过此字节会发生什么情况?
02-23-46-66-00-89-A1变为
02-23-46-66-89-A1

abs差异再次出现
01-00-01-01-00-00

现在可以接受了……
XX-XX-XX-XX-XX-XX-XX

另一方面,日志中可能缺少一个字节,这导致了一个变体,您可以尝试插入第一个RR的模式字节来代替第一个RR。。。例如:

让我们再说一遍,我们的模式是
01-23-45-67-89-A1

二进制日志中可能出现的命中结果如下:
02-23-46-88-A1-00

absdiff 01-00-01-21-18-A1

接受 XX-XX-XX-RR-RR-RR

现在我们尝试插入。。。所以我们的日志实际上是这样的 02-23-46-67-88-A1-00

abs差异再次出现。。。 01-00-01-00-01-00

接受 XX-XX-XX-XX-XX-XX-XX

当然,可能会有更多类型的错误。。。就像一个无论是跳过还是插入都无法解决的问题

计算原始差异。。。加上跳过时的差异和插入时的差异。。。获取最佳结果(读取:具有最少RR字节的结果)


您需要为阈值找到合适的值,以及您希望允许的跳过/插入次数。。。或者你可以用一些相似性度量来代替二进制接受

我想我会明白你的意思;它似乎会工作,一旦调整,我想知道我是否能适应我实际使用的精确匹配的boyer-moore算法。。。我会做些实验,做个报告。相似性的度量呢?度量是使事物具有可比性的一种方法。。。这可以是一个函数,它将匹配的候选项转换为一个数值,与其他匹配的候选项或thrshold值相比较。。。对于上述算法,您可以简单地求和所有绝对差异字节并除以模式长度,或者您可以忽略阈值以下的差异,只求和RRs…这样您可以允许用户微调度量参数并给出一个阈值,以满足其需要,虽然您的代码仍然执行相同的计算,但使用不同的系数,但我想知道使用机器学习(如ML.net)对此任务是否有任何好处。有人有过类似的工作经验吗?我还将发布一些更复杂的数据示例