如何使用 procmail 和命令行工具对非英语电子邮件进行分类?



我订阅了一个邮件列表,其中有些邮件是我无法理解的非英语邮件。

如何使用procmail和/或命令行工具过滤非英语消息以/dev/null

我使用procmail来过滤我的电子邮件,所以理想情况下,任何替代工具也需要一个procmail配方。

我宁愿不必训练自己的语言模型。

一种方法是使用 Gertjan van Noord 的 perl TextCat 包。

text_cat脚本输出邮件最可能的语言。 此配方假定text_cat已安装在/usr/local/bin下。

下面是调用text_cat脚本的简单procmail方法:

:0
* ^Subject.*Jobs.*Board
{
LANG_=`/usr/local/bin/text_cat`
:0
* ! LANG ?? ^english$
/dev/null
:0
jobs/
}

我已经经营text_cat几年了。 没有任何非英语邮件被归类为英语,也就是说,没有误报。 我对检查假阴性并不严格。


第二种方法,正如tripleee在评论中提到的,是使用spamassassin提供的语言分类,它也使用text_cat脚本。 垃圾邮件刺客将解开上面的原版text_cat版本不会包装的任何MIME传输编码。

以下是用于过滤垃圾邮件刺客X-Spam-Languages标头的未完全测试procmail配方:

:0
* ^Subject.*Jobs.*Board
{    
# Delete non-english language emails using spamassassin header
# Test for not X-Spam-Languages: en
:0
* !^X-Spam-Languages: en$
foreign/
# Save english language mails in folder
:0
jobs/
}

警告:垃圾邮件刺客偶尔会提供多种语言分类,如下所示:

X-Spam-Languages: en da ro

上述配方没有说明。

垃圾邮件刺客语言分类配置

编辑/etc/spamassassin/v310.pre并取消注释以下行:

loadplugin Mail::SpamAssassin::Plugin::TextCat

/etc/spamassassin/local.cf中配置插件:

ok_languages en       # I understand english
inactive_languages '' # Enable all languages
add_header all Languages _LANGUAGES_
# score UNWANTED_LANGUAGE_BODY 5 # Increase score - not necessary and not recommended 

此配方在垃圾邮件刺客版本3.4.2中进行了不完全测试。


要使这些答案适应排除不同的语言,在第一种情况下将另一种语言替换为english,在第二种情况下将其他 2 个字符的语言代码替换为en

许多现代电子邮件客户端标识电子邮件的字符集,尽管通常不是其语言。如果要丢弃日语,中文,韩语和俄语消息,可以尝试类似

:0HB
* ^Content-type:[  ]*text/[/;]*;[  ]*charset="?(iso-2022|ks-c|gb|koi|cp-1251)
foreign

由于某些客户端在用英语书写时忘记更改字符集,因此可能会产生一些误报,因此我建议保存到文件夹中并定期查看。相反的问题更难;许多外语使用与英语相同的字符集,因此无法像这样可靠地识别。

最新更新