From: Vsevolod Stakhov Date: Tue, 19 Jul 2011 13:51:28 +0000 (+0400) Subject: * Add classifiers pre-selection script X-Git-Tag: 0.4.0~9 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4335e5a8ce4e23abd9c2977df7f1b13665b80202;p=rspamd.git * Add classifiers pre-selection script --- 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