如何使用 procmail 和命令行工具对非英语电子邮件进行分类?
How do I categorise non-english email using procmail and command line tools?
我订阅了一个邮件列表,其中一些消息是非英语的,我无法理解。
如何使用 procmail
and/or 命令行工具将非英语消息过滤到 /dev/null
?
我使用 procmail
来过滤我的电子邮件,因此理想情况下任何替代工具也需要 procmail
配方。
我宁愿不必训练自己的语言模型。
一种方法是使用 perl TextCat package from Gertjan van Noord.
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 几年了。没有 non-english 条分类为英语的消息,即没有 false-positives。我没有严格检查 false-negatives.
第二种方法,如tripleee in a comment, is to use the language categorisation provided by spamassassin所述,它也使用text_cat脚本。 Spamassassin 将解开任何 MIME 传输编码,而上面的 text_cat 版本不会。
这里有一个未完全测试 procmail
过滤 spamassassin X-Spam-Languages
header:
的方法
: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/
}
警告:spamassassin 偶尔会像这样提供多种语言分类:
X-Spam-Languages: en da ro
上面的食谱没有考虑到。
Spamassassin 语言分类配置
编辑 /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
此食谱未通过 spamassassin 3.4.2 版进行完整测试。
要调整这些答案以排除不同的语言,将涉及在第一种情况下用另一种语言替换 english
,在第二种情况下用其他 2 个字符的语言代码替换 en
。
许多现代电子邮件客户端识别电子邮件的字符集,但通常不是其语言。如果你想丢弃日文、中文、韩文和俄文消息,你可以尝试类似
:0HB
* ^Content-type:[ ]*text/[/;]*;[ ]*charset="?(iso-2022|ks-c|gb|koi|cp-1251)
foreign
因为有些客户在写英文的时候忘记更改字符集,这很可能会产生一些误报,所以我建议保存到一个文件夹中并定期查看。相反的问题更难;许多外语使用与英语相同的字符集,因此无法可靠地识别。
我订阅了一个邮件列表,其中一些消息是非英语的,我无法理解。
如何使用 procmail
and/or 命令行工具将非英语消息过滤到 /dev/null
?
我使用 procmail
来过滤我的电子邮件,因此理想情况下任何替代工具也需要 procmail
配方。
我宁愿不必训练自己的语言模型。
一种方法是使用 perl TextCat package from Gertjan van Noord.
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 几年了。没有 non-english 条分类为英语的消息,即没有 false-positives。我没有严格检查 false-negatives.
第二种方法,如tripleee in a comment, is to use the language categorisation provided by spamassassin所述,它也使用text_cat脚本。 Spamassassin 将解开任何 MIME 传输编码,而上面的 text_cat 版本不会。
这里有一个未完全测试 procmail
过滤 spamassassin X-Spam-Languages
header:
: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/
}
警告:spamassassin 偶尔会像这样提供多种语言分类:
X-Spam-Languages: en da ro
上面的食谱没有考虑到。
Spamassassin 语言分类配置
编辑 /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
此食谱未通过 spamassassin 3.4.2 版进行完整测试。
要调整这些答案以排除不同的语言,将涉及在第一种情况下用另一种语言替换 english
,在第二种情况下用其他 2 个字符的语言代码替换 en
。
许多现代电子邮件客户端识别电子邮件的字符集,但通常不是其语言。如果你想丢弃日文、中文、韩文和俄文消息,你可以尝试类似
:0HB
* ^Content-type:[ ]*text/[/;]*;[ ]*charset="?(iso-2022|ks-c|gb|koi|cp-1251)
foreign
因为有些客户在写英文的时候忘记更改字符集,这很可能会产生一些误报,所以我建议保存到一个文件夹中并定期查看。相反的问题更难;许多外语使用与英语相同的字符集,因此无法可靠地识别。