我有N个字符串。 此外,有K正则表达式,我不知道。每个字符串要么匹配其中一个正则表达式,要么是垃圾。集合中总共有L个垃圾字符串。 K和L都不为人知。
我想推断出正则表达式。显然,这个问题有无穷无尽的解决方案。我需要找到一个“相当不错的解决方案”,
1)使K
最小化2)最小化L
3)最大化正则表达式的“细节”。我不知道这个品质的正确用语是什么。例如,字符串“ab123”可以描述为/ ab \ d + /或/\w+.+/,但第一个正则表达式更“具体”。
所有3个要求都需要作为一个复合标准,具有一定的合理权重。
针对一种特定情况的解决方案:如果L = 0且K = 1(只有一个正则表达式,并且没有垃圾),那么我们可以找到字符串的LCS(最长公共子序列)并从中得出相应的正则表达式那里。但是,当我们有“噪音”(L> 0)时,这种方法不起作用。
非常感谢任何想法(或对现有工作的指示)。
答案 0 :(得分:2)
您要做的是语言学习或语言推断,而不是概括对一组给定的示例(你可能希望用一种小而强特定的语法来推断一种语言。
我不确定对此进行了多少研究。但是,如果您还想找到接受所有 n 字符串的minimal(= general)正则表达式,请在MDL(最小描述长度)和FSMs上搜索论文(有限状态机)。
Google Scholar处的两个有趣的问题:
答案 1 :(得分:1)
学术界的关键词是“语法推理”。不幸的是,没有任何有效的通用算法来做你提出的那种事情。你真正的问题是什么?
编辑:听起来您可能对数据描述语言感兴趣。 PADS(http://www.padsproj.org/)是一个典型的例子。
答案 2 :(得分:0)
这里没什么聪明的,也许我不完全理解这个问题?
为什么不总是将L减少到0?检查每个正则表达式的每个字符串;如果一个字符串与任何正则表达式都不匹配,那就是垃圾。如果匹配,请记住匹配的正则表达式/字符串,并在每个L = 0,K = 1上执行LCS以推断每个正则表达式的定义。