Для небольшого количества правил и сообщений вы можете применить алгоритм грубой силы: возьмите каждое правило и каждое сообщение и сравните, если они подходят. Вы получите сложность O (r m ), где r - количество правил, а m - номер сообщения, не принимая во внимание, что правило может иметь несколько условий.
Для огромного количества правил или сообщений вы можете внедрить сеть Rete (http://en.wikipedia.org/wiki/Rete_algorithm). Это занимает немного памяти, но на практике это происходит намного быстрее. В зависимости от того, как вы разрабатываете свои правила, вы получите различные сложности.
Первый подход прост, и я не думаю, что мне нужно это объяснять. Однако, если вам нужна помощь, дайте мне знать, и я подробно опишу эту идею. Позвольте мне объяснить второй подход:
Прочтите немного об алгоритме Rete, прежде чем идти дальше.
В альфа-части сети Rete вы будете хранить различные условия, которые указаны в ваших правилах. Некоторые правила могут иметь некоторые условия. Как:
Правило1 : ЕСЛИ (message.date равно 24.10.2009) И (message.title содержит "привет"), ТО делать что-то1
Правило2 : ЕСЛИ (message.hasAttachement имеет значение ИСТИНА) И (message.date равно 24.10.2009), ТО делать что-то2
Таким образом, альфа-часть сети будет иметь 3 элемента
- C1: (message.date равно 24.10.2009)
- C2: (message.title содержит "привет")
- C3: (message.hasAttachement TRUE)
В бета-сети у вас будет два узла соединения, которые связывают C1-C2 и C3-C1.
Производственные узлы, завершающие бета-сеть, будут содержать последовательность действий, которые должны быть выполнены, когда сообщение удовлетворяет всем условиям правила (в альфа-части) и всех проверках согласованности (в бета-части).
Самая сложная часть - это бета-сеть. Если вы хотите, чтобы в ваших правилах было только логическое И (без других логических операций или скобок), то это тривиально. Однако, если вам нужны более сложные конструкции, вам придется написать много кода и выполнить много тестов.
Для получения дополнительной информации о Rete:
- Согласование производства для больших систем обучения / - Роберт Б. Доренбос. (1995)
- Об эффективном внедрении производственных систем / - Чарльз Л. Форги (1979)