From 4335e5a8ce4e23abd9c2977df7f1b13665b80202 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 19 Jul 2011 17:51:28 +0400 Subject: [PATCH] * Add classifiers pre-selection script --- conf/lua/rspamd.classifiers.lua | 48 +++++++++++++++++++++++++++++++++ conf/lua/rspamd.lua | 4 +++ 2 files changed, 52 insertions(+) create mode 100644 conf/lua/rspamd.classifiers.lua diff --git a/conf/lua/rspamd.classifiers.lua b/conf/lua/rspamd.classifiers.lua new file mode 100644 index 000000000..e158a29a6 --- /dev/null +++ b/conf/lua/rspamd.classifiers.lua @@ -0,0 +1,48 @@ +-- Detect language of message and selects appropriate statfiles for it + +classifiers['bayes'] = function(classifier, task, is_learn, is_spam) + -- Subfunction for detection of message's language + local detect_language = function(task) + local parts = task:get_text_parts() + for _,p in ipairs(parts) do + local l = p:get_language() + if l then + return l + end + end + return nil + end + + -- Main procedure + language = detect_language(task) + if language then + -- Find statfiles with specified language + local selected = {} + for _,st in pairs(classifier:get_statfiles()) do + local st_l = st:get_param('language') + if st_l and st_l == language then + -- Insert statfile with specified language + table.insert(selected, st) + end + end + if table.maxn(selected) > 1 then + return selected + end + else + -- Language not detected + local selected = {} + for _,st in ipairs(classifier:get_statfiles()) do + local st_l = st:get_param('language') + -- Insert only statfiles without language + if not st_l then + table.insert(selected, st) + end + end + if table.maxn(selected) > 1 then + return selected + end + end + + return nil +end + diff --git a/conf/lua/rspamd.lua b/conf/lua/rspamd.lua index 203862776..822f6447f 100644 --- a/conf/lua/rspamd.lua +++ b/conf/lua/rspamd.lua @@ -82,3 +82,7 @@ end if file_exists('rspamd.local.lua') then dofile('rspamd.local.lua') end + +if file_exists('rspamd.classifiers.lua') then + dofile('rspamd.classifiers.lua') +end -- 2.39.5