我有多个字符串,这些字符串是基于几个(大部分)已知的变量和一些未知的模板创建的。我想知道这些模板是什么,以便从这些字符串中提取变量部分。之后,我可以相对容易地推断出每个子字符串的含义,所以这里的问题仅限于模式识别。例如:
"76 (q) h""a x q y 123""c x e y 73""3 (e) z"...# 模式识别:示例 -> 模板"{1} x {2} y {3}""{1} ({2}) {3}"# 基于模板类型的聚类"{1} x {2} y {3}" -> ["a x q y 123", "c x e y 73", ...]"{1} ({2}) {3}" -> ["76 (q) h", "3 (e) z", ...]# 推断:子字符串 -> 提取的变量"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}
我找到了一个类似的提问:字符串中的智能模式匹配,但在我的情况下,没有办法用正面例子来训练解析器。有什么解决方法的想法吗?
回答:
结果证明,我需要的是所谓的序列模式挖掘。有许多算法,例如SPADE、PrefixSpan、CloSpan、BIDE等。我需要的是一个能够处理间隙的算法,或者一个能够找到我可以用通配符连接的频繁子字符串的算法。从找到的频繁闭合模式中选择合适的模式远非显而易见,我还在研究中,但现在比两个月前更接近目标了。