У меня есть N строк. Кроме того, есть K регулярных выражений, неизвестных мне. Каждая строка соответствует либо одному из регулярных выражений, либо мусору. В комплекте есть всего L мусорных струн. И K и L неизвестны.Автоматическое построение регулярных выражений
Я бы хотел вывести регулярные выражения. Очевидно, эта задача имеет бесконечное число решений. Мне нужно найти "достаточно хорошее решение", которое
1) сводит к минимуму K
2) сводит к минимуму L
3) максимально "специфику" регулярных выражений. Я не знаю, каков правильный термин для этого качества. Например, строка «ab123» может быть описана как/ab \ d +/или /\w+.+/, но первое регулярное выражение более «специфично».
Все 3 требования должны приниматься как один составной критерий с определенными разумными весами.
Решение для одного конкретного случая: если L = 0 и K = 1 (только одно регулярное выражение и без мусора), то мы можем просто найти LCS (самую длинную общую подпоследовательность) для строк и создать соответствующее регулярное выражение оттуда. Однако, когда у нас есть «шум» (L> 0), этот подход не работает.
Любые идеи (или указатели на существующую работу) приветствуются.
Что дается информация? Только N строк?Является ли регулярное выражение уже решенным, но просто скрыто от вас? Вы можете легко создать регулярное выражение, которое соответствует определенному набору строк, присоединив их к «|». –
:), который будет обманывать. Наверное, мне нужны еще один критерий, чтобы предотвратить такое решение ... Ограничьте регулярное выражение, я думаю. –
Ваше условие №3 лучше описать как минимизирующее количество совпадающих строк, не входящих в заданный набор из N строк. Учитывая, что у вас есть 3 вещи, чтобы свести к минимуму (хотя вы могли бы так же легко требовать L = 0), вам нужно весить, какие факторы важнее. – user57368