Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 如何使用procmail和命令行工具对非英语电子邮件进行分类?_Email_Command Line Interface_Text Classification_Non English_Procmail - Fatal编程技术网

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
配方,用于在spamassassin
X-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语言标题。