А как Вы рассматриваете специфичность фильтров к одной и той же строке?
Для одной строки фильтр или пропускает ее или откидывает.
Соответственно, Ваша задача логична для наборов строк, тогда менее специфичный фильтр будет пропускать больше строк, более специфичный меньше - исходя из этого можно задать фильтрам некие условные веса, по которым их ранжировать.
Если все-таки задача стоит именно так, и оценивается специфичность для одной конкретной строки - можно попробовать мутировать строку разными способами, делая набор строк, прогонять этот набор через фильтры и таким образом свести задачу ранжирования к вышеописанной.
Мутировать строку можно разными способами:
- менять случайные буквы на другие
- менять буквы местами
- убирать\добавлять буквы, слова
- менять слова местами
Таким образом из одной строки можно делать целый тестовый набор.
Соответственно, например мы из строки сделали таким образом 20 тестовых строк, прогнали их фильтрами и посчитали сколько из этих новых строк удовлетворили фильтрам, определив специфичность фильтров в конечном итоге.