正则表达式 – 给定有限列表的代表性字符串的正则表达式的语法推理?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 给定有限列表的代表性字符串的正则表达式的语法推理?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在分析一个大量的公开数据集,其中包含许多详细的人类可读的字符串,这些字符串由一些常规(正式语言理论意义上的)语法产生。

仔细观察这些字符串是不是太难看了,不幸的是,这些独特的字符串中有大约24,000个分为33个类别和1714个子类别,所以手动执行有点痛苦。

基本上,我正在寻找一个现有的算法(最好用现有的参考实现)来获取一个任意的字符串列表,并尝试推断一些可用于生成的正则表达式的最小值(对于一些合理的最小定义)他们(即从该语法产生的语言从有限的一组字符串推断出正则语法)。

我已经考虑过反复贪婪最长的常见子字符串消除,但是只有这么远,因为它不会崩溃任何东西,但完全匹配,所以不会检测到,在一个特定的位置上变化的数字字符串的共同模式语法。

强制强制任何不会脱离常见子字符串消除的内容是可能的,但可能在计算上是不可行的。 (此外,我已经考虑过了,可能有一个“相序”和/或“本地最小”问题与子字符串消除,因为你可能会做一个贪婪的子串匹配,最终强制最终的语法被压缩/尽管它最初似乎是最好的减少)。

是的,事实证明这确实存在;所需要的是在学术上被称为DFA学习算法的知识,其示例包括

> Angluin的L *
> L *(向列添加反例)
> Kearns / Vazirani
> Rivest / Schapire
> NL *
>正态负推理(RPNI)
> DeLeTe2
> Biermann&费尔德曼算法
> Biermann&费尔德曼算法(使用SAT求解)

以上的源代码libalf,C中的开源自动机学习算法框架;至少有一些这些算法的描述可以在this textbook中找到。在gitoolbox中还有用于MATLAB的语法推理算法(包括DFA学习)的实现。

自07年以来,过去并没有得到令人满意的回答,我正在评估这些算法,并将更新有关它们有用的更多信息,除非在该地区具有更多专业知识的人才是首选(最好的)。

注意:我现在接受我自己的答案,但如果有人可以提供一个,我会乐意接受一个更好的答案。

另外注意:我决定使用自定义代码的路由,因为使用通用算法对我正在使用的数据来说有点过分。我在这里留下这个答案,以防其他人需要它,如果我做了这些评估,将会更新。

猜你在找的正则表达式相关文章