正则表达式 – 为字符串列表创建正则表达式

前端之家收集整理的这篇文章主要介绍了正则表达式 – 为字符串列表创建正则表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我从科学文献中提取了一系列表格,这些表格由列组成,每列都是不同的类型.这是一个例子

我希望能够为每列自动生成正则表达式.显然有一些简单的解决方案,如.*所以我会添加他们只使用的约束:

> [A-Z] [a-z] [0-9]
>明确的标点符号(例如’,’,”’)
>“简单”量词(例如{3,4}

上表的“最佳”答案是:

[A-Z]{3}
 [A-Za-z\s\.]+
 \d{4}\sm
 \d{2}\u00b0\d{2}'\d{2}"N,\d{2}\u00b0\d{2}'\d{2}"E
 (speciosissima|intermediate|troglodytes)
 (hf|sr)
 \d{4}

当然,如果我们移出地理区域,第四个正则表达式会破裂,但软件不知道这一点.目的是收集许多正则表达式,比如说“坐标”并概括它们,可能是部分手动的.仅当存在少量不同的字符串时才会创建枚举.

我很感激能够做到这一点的(特别是F / OSS)软件的例子,特别是在Java中. (它类似于Google的Refine).我知道this question 4 years ago,但这并没有真正回答问题和text2re网站似乎是互动的.

注意:我注意到投票结束为“过于本地化”.这是一个非常普遍的问题(给出的表只是一个例子),正如Google / Freebase开发的Refine解决这个问题所示.它可能涉及各种各样的表格(例如财务,新闻等).这是一个浮点值:

自动确定一些权威机构报告实际年龄(例如不是几个月,几天)并使用2位数的精确度将是有用的.

您的特定问题是“通过演示编程”的特例.也就是说,给定一堆输入/输出示例,您需要生成一个程序.对于您来说,输入是字符串,输出是每个字符串是否属于给定列.最后,您希望使用您提出的有限正则表达式的语言生成程序.

这个通过演示编程的特殊实例似乎与MSR最近的一个项目Flash Fill密切相关.在那里,它们不是生成正则表达式来匹配数据,而是自动生成程序以根据输入/输出示例转换字符串数据.

我只是浏览了他们论文的one,但我会尝试在这里列出我理解的内容.

本文基本上有两个重要的见解.首先是设计一种小型编程语言来表示字符串转换.即使使用全开式正则表达式也会创建太多可能快速搜索的可能性.他们设计了自己的抽象语言来操纵字符串;但是,您的约束(例如,仅使用简单的量词)可能会扮演与其自定义语言相同的角色.这在很大程度上是可能的,因为您的特定问题的范围比他们的要小一些.

第二个见解是关于如何在这种抽象语言中实际找到与给定输入/输出对匹配的程序.我的理解是这里的关键思想是使用一种名为version space algebra的技术.关于版本空间代数的粗略想法是你保持可能程序空间的表示,并通过引入额外的约束来反复修剪它.这个过程的确切细节远远超出了我的主要兴趣,所以你最好阅读像introduction to version space algebra这样的东西,其中包括一些示例代码.

他们还有一些聪明的方法来排列不同的候选程序,甚至猜测哪些输入可能对已经生成的程序有问题.我看到了一个演示,他们生成了一个程序而没有给它足够的输入/输出对,程序实际上可以突出显示可能不正确的新输入.这种排名非常有趣,但需要一些更复杂的机器学习技术,可能不会立即适用于您的用例.可能仍然很有趣. (此外,这可能在与我链接文章不同的文章中详细说明.)

所以是的,长话短说,您可以通过将输入/输出示例提供给基于版本空间代数的系统来生成表达式.我希望有所帮助.

原文链接:/regex/451904.html

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