Работа с данными спама
Обучение Spam и Ham¶
Rspamd обучается помечать письма как спам или хам (полезная почта), когда вы перемещаете сообщение в папку «Спам» или из нее в любой другой почтовый ящик, кроме корзины.
Это реализовано с помощью Sieve-плагина sieve_imapsieve и скриптов парсера.
Rspamd также обучается автоматически при обнаружении высокого или низкого балла (см. https://rspamd.com/doc/configuration/statistic.html#autolearning). Плагин настроен на поддержание разумного соотношения между обучением на спаме и хаме.
Статистика Байеса записывается в Redis под ключами BAYES_HAM и BAYES_SPAM.
Помимо Байеса, используется локальное хранилище fuzzy-хешей для обучения повторяющимся шаблонам в тексте или изображениях, указывающим на хам или спам.
Вы также можете использовать веб-интерфейс Rspamd для обучения или настройки определенных параметров Rspamd.
Обучение Spam или Ham из существующей директории¶
Вы можете использовать однострочную команду для обучения на письмах в текстовом формате (без сжатия):
# Ham
for file in /my/folder/cur/*; do docker exec -i $(docker compose ps -q rspamd-animails) rspamc learn_ham < $file; done
# Spam
for file in /my/folder/.Junk/cur/*; do docker exec -i $(docker compose ps -q rspamd-animails) rspamc learn_spam < $file; done
# Ham
for file in /my/folder/cur/*; do docker exec -i $(docker-compose ps -q rspamd-animails) rspamc learn_ham < $file; done
# Spam
for file in /my/folder/.Junk/cur/*; do docker exec -i $(docker-compose ps -q rspamd-animails) rspamc learn_spam < $file; done
Рассмотрите возможность подключения локальной папки как нового тома (volume) для rspamd-animails в docker-compose.yml и обучения на файлах внутри контейнера. Это можно использовать как обходной путь для парсинга сжатых данных с помощью zcat. Пример:
for file in /data/old_mail/.Junk/cur/*; do rspamc learn_spam < zcat $file; done
Сброс обученных данных (Bayes, Neural)¶
Для сброса обученных данных необходимо удалить ключи в Redis, поэтому сначала создайте копию базы данных Redis:
Копия базы данных Redis¶
# Рекомендуется остановить Redis перед копированием файла.
cp /var/lib/docker/volumes/animailsdockerized_redis-vol-1/_data/dump.rdb /root/
Сброс данных Байеса¶
source animails.conf
docker compose exec redis-animails sh -c 'redis-cli -a ${REDISPASS} --scan --pattern BAYES_* | xargs redis-cli -a ${REDISPASS} del'
docker compose exec redis-animails sh -c 'redis-cli -a ${REDISPASS} --scan --pattern RS* | xargs redis-cli -a ${REDISPASS} del'
source animails.conf
docker-compose exec redis-animails sh -c 'redis-cli -a ${REDISPASS} --scan --pattern BAYES_* | xargs redis-cli -a ${REDISPASS} del'
docker-compose exec redis-animails sh -c 'redis-cli -a ${REDISPASS} --scan --pattern RS* | xargs redis-cli -a ${REDISPASS} del'
Сброс нейронных данных (Neural)¶
source animails.conf
docker compose exec redis-animails sh -c 'redis-cli -a ${REDISPASS} --scan --pattern rn_* | xargs redis-cli -a ${REDISPASS} del'
source animails.conf
docker-compose exec redis-animails sh -c 'redis-cli -a ${REDISPASS} --scan --pattern rn_* | xargs redis-cli -a ${REDISPASS} del'
Сброс данных Fuzzy¶
source animails.conf
# Сначала нужно войти в redis-cli:
docker compose exec redis-animails redis-cli -a ${REDISPASS}
# В redis-cli:
127.0.0.1:6379> EVAL "for i, name in ipairs(redis.call('KEYS', ARGV[1])) do redis.call('DEL', name); end" 0 fuzzy*
source animails.conf
# Сначала нужно войти в redis-cli:
docker-compose exec redis-animails redis-cli -a ${REDISPASS}
# В redis-cli:
127.0.0.1:6379> EVAL "for i, name in ipairs(redis.call('KEYS', ARGV[1])) do redis.call('DEL', name); end" 0 fuzzy*
Информация
Если redis-cli выдает ошибку...
(error) ERR wrong number of arguments for 'del' command