独立于符号的字符串的模式匹配



我需要一种算法,它可以在数据中找到预定义的模式(以字符串的形式存在),而不依赖于数据和模式的实际符号/字符。我只关心符号之间的关系,而不关心符号本身。对数据中的同一符号使用不同的模式符号也是合法的。模式匹配算法唯一需要强制执行的是,保留模式中同一符号的多次出现。举个例子:

模式是abca,所以第一个和最后一个字母是相同的。对于我的应用程序,写这篇文章的等效方法是1 2 3 1,其中数字只是变量。我拥有的数据是Thisextsatest。得到的算法应该在这里给我两个正确的匹配,texttest。因为只有在这两种情况下,第一个和第四个字母才是相同的,就像在模式中一样。

作为第二个例子,模式abcd应该返回12个匹配(Thisextisat中的每个位置一个)。由于模式中没有重复的变量,所以它在任何地方都是微不足道的匹配。即使在texttest的情况下,因为模式的变量ad映射到同一符号是合法的。

该算法的目标应该是检测书面语言中的相似性。想象一下,有一本英语词典,并用模式看不见或等效模式1 2 3 4 4 2对其进行解析。然后,您会看到,例如,单词贬低包含相同的字母模式。

所以,现在我希望明确我需要什么,我有一些问题:

  • 这个算法叫什么?这是一个众所周知的问题已经解决了吗?

  • 有关于此事的出版物吗?当你不知道正确的搜索词来将这个问题与常规模式匹配区分开来时,很难找到任何有用的东西。

  • 有现成的实施方案吗

我没有用Regex来处理太复杂的事情,所以我不知道在Regex中是否有可能发生这样的事情,因为你基本上不关心符号本身,只考虑它们的出现模式。

我真的很感谢你的帮助!

我认为这里不需要正则表达式。您的搜索词:

unseen
123442

这有六个字符,所以将文本中的每个单词索引到6个字符的中

贬低

12,12,12,12,11,12,12 2-mers
123,123,123,122,112,123 3-mers
1234,1234,1233,1223,1123 4-mers
12345,12344,12334,12234 5-mers
123455,123442,123321 6-mers

所以,只要看看6人,你就有一场比赛了。任何小于搜索词的6位数字也将是匹配的,以允许abcd(1234)大小写与abca(1231)单词匹配。

因此,给定一个n个字符的搜索项,只需将每个单词拆分为其组成的n聚体,并检查数字是否等于或小于。

最新更新