我有多个字符串,这些字符串是基于一些(大部分)已知变量和一些未知模板创建的。我想知道这些模板是从这些字符串中提取可变部分的。之后我可以相对容易地推断每个子串的含义,所以这里只有模式识别才是问题。例如:
"76 (q) h"
"a x q y 123"
"c x e y 73"
"3 (e) z"
...
# pattern recognition: examples -> templates
"{1} x {2} y {3}"
"{1} ({2}) {3}"
# clusters based on template type
"{1} x {2} y {3}" -> ["a x q y 123", "c x e y 73", ...]
"{1} ({2}) {3}" -> ["76 (q) h", "3 (e) z", ...]
# inference: substrings -> extracted variables
"76 (q) h" -> ["76", "q", "h"] -> {x: "h", y: "q", z: 76}
"a x q y 123" -> ["a", "q", "123"] -> {x: "a", y: "q", z: 123}
"c x e y 73" -> ["c", "e", "73"] -> {x: "c", y: "e", z: 73}
"3 (e) z" -> ["3", "e", "z"] -> {x: "z", y: "e", z: 3}
我发现了一个类似的问题:Intelligent pattern matching in string,但在我的情况下,无法用正面训练解析器。知道如何解决这个问题吗?
答案 0 :(得分:0)
事实证明我需要的是序列模式挖掘。有许多算法,例如SPADE,PrefixSpan,CloSpan,BIDE等。我需要的是一个算法,它也适用于间隙,或者一个算法,它找到了我可以与通配符连接的频繁子串。从找到的频繁闭合模式中选择合适的模式远非明显,我仍在努力,但我现在比2个月前更接近。