Email 如何使用procmail和命令行工具对非英语电子邮件进行分类?
我订阅了一个邮件列表,其中一些邮件是我无法理解的非英语邮件 如何使用Email 如何使用procmail和命令行工具对非英语电子邮件进行分类?,email,command-line-interface,text-classification,non-english,procmail,Email,Command Line Interface,Text Classification,Non English,Procmail,我订阅了一个邮件列表,其中一些邮件是我无法理解的非英语邮件 如何使用procmail和/或命令行工具将非英语邮件过滤到/dev/null 我使用procmail来过滤我的电子邮件,因此理想情况下,任何替代工具都需要procmail配方 我宁愿不必训练自己的语言模型。一种方法是使用来自的perl包 text\u cat脚本为邮件输出最可能的语言。此配方假定已在/usr/local/bin下安装了text\u cat 下面是一个调用text\u cat脚本的简单procmail方法: :0 * ^S
procmail
和/或命令行工具将非英语邮件过滤到/dev/null
我使用procmail
来过滤我的电子邮件,因此理想情况下,任何替代工具都需要procmail
配方
我宁愿不必训练自己的语言模型。一种方法是使用来自的perl包
text\u cat
脚本为邮件输出最可能的语言。此配方假定已在/usr/local/bin
下安装了text\u cat
下面是一个调用text\u cat
脚本的简单procmail
方法:
:0
* ^Subject.*Jobs.*Board
{
LANG_=`/usr/local/bin/text_cat`
:0
* ! LANG ?? ^english$
/dev/null
:0
jobs/
}
几年来我一直在运行text_cat。没有任何非英语邮件被归类为英语,也就是说,没有误报。我没有严格检查假阴性
第二种方法,如在评论中提到的,是使用提供的语言分类,该分类还使用text_cat脚本。Spamassassin将打开任何MIME传输编码,而上面的香草文本_cat版本不会 下面是一个未完全测试的
procmail
配方,用于在spamassassinX-Spam-Languages
标题上进行过滤:
: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进行了不完全测试
为了使这些答案适用于排除不同的语言,需要在第一种情况下用另一种语言替换
英语
,在第二种情况下用另两个字符的语言代码替换英语
。许多现代电子邮件客户端识别电子邮件的字符集,虽然通常不是它的语言。如果您想丢弃日文、中文、韩文和俄文消息,可以尝试以下方法
:0HB
* ^Content-type:[ ]*text/[/;]*;[ ]*charset="?(iso-2022|ks-c|gb|koi|cp-1251)
foreign
因为有些客户在用英语书写时忘记更改字符集,这可能会产生一些误报,所以我建议将其保存到文件夹中并定期查看。相反的问题更难解决;许多外国语言使用与英语相同的字符集,因此无法像这样可靠地识别。请记住,TextCat提供的模型非常粗糙,无法很好地区分丹麦语和挪威语或塞尔维亚语和俄语。还有其他类似界面的语言识别工具,或者你可以训练自己的TextCat模型。很高兴知道,但我对英语和其他所有东西都感兴趣。我不想训练自己的模型(我已经相应地更新了我的问题)。另一个问题是TextCat本身对电子邮件编码一无所知。你可能更喜欢使用像SpamAssassin这样的邮件感知过滤器,它包括一个集成的TextCat分支,但也负责在运行它之前打开任何MIME传输编码。
formail-a
不仅仅是为了评估$LANG
@makeyourownmaker的值,这不是我的意思。Procmail使用语法variablename???
来测试变量的值。参考manpage procmailrc(5)。这是一个有用的答案(我投了更高的票),但考虑到您列出的限制,我倾向于接受我的答案(假设这是可能的,并且只有在一两周内没有更好的答案的情况下)。您可以在一段时间后接受自己的答案(IIRC两天)如果有更好的答案出现,请稍后更改已接受的答案。在这一点上,我同意你的答案是更好的。调整它以使用SpamAssassin应该是相当简单的。我已经添加了一些使用SpamAssassin配置语言分类的指针。我已经修改了我以前的procmail配方,以使用spamassassin语言标题。