自动查找短正则表达式以匹配一组单词?

时间:2015-07-18 07:21:30

标签: regex machine-learning

我不是在寻找特定的正则表达式,而是寻找能够找到它们的软件

我们假设我有一个文件A和一个文件B:如何找到一个与A的所有单词匹配但与A中的任何单词都不匹配的正则表达式?

如果A包含" truit fruit"并且B包含"荒谬的",然后软件可以返回类似"。 ru。"但是'。 r。'只会无效。

这是"实用"另一个问题[1]的方面,虽然我感兴趣的是找到一个在实践中解决它的实际软件。

感谢您的帮助,

Nathann

[1] https://cstheory.stackexchange.com/questions/1854/is-finding-the-minimum-regular-expression-an-np-complete-problem

1 个答案:

答案 0 :(得分:1)

没有算法以某种方式"巧妙地推导出"来自例子的正则表达式。您只能通过A中单词的常见子串的所有排列实现迭代的强力尝试,并且在您找到解决方案之前对其进行测试B.但是,您无法保证找到解决方案。

对于A中没有所有单词的共同子串的情况,您可以扩展该方法以引入"或"正则表达式中的运算符但这真的很丑陋而且很慢。

如果这不能导致解决方案,那么您必须继续扩展您的尝试,以便通过迭代B中的所有单词并从中创建反模式,将排除规则添加到表达式中。可怕的尝试。

如上所述:你永远不能保证找到解决方案。

但有一件事:

如果你对 最终正则表达式不感兴趣,你可以这样做:创建一个正则表达式简单地组合A"空白填充版本的A"使用"或"操作(在您的示例中为$result->body->Telecom circle)。显然,这种尝试创造了巨大的表达。然后,您必须注意排除可能再次出现在B中的确切子串。这可能会导致更长的表达。

结论:对此没有真正优雅的解决方案。仅仅因为这个问题不允许这样做。问题是:为什么它必须是正则表达式?为什么你不能简单地进行字符串比较?在这种模糊定义的情景中,这可能不会更昂贵......