如何用Perl检测俄罗斯垃圾邮件帖子?

xv8emn3q  于 2023-05-18  发布在  Perl
关注(0)|答案(3)|浏览(174)

我有一个用Perl写的英语论坛网站,它不断被俄语垃圾邮件轰炸。有没有一种方法使用Perl和regex来检测俄语文本,以便我可以阻止它?

tez616oj

tez616oj1#

您可以使用以下命令来检测Cyrillic字符(用于俄语):

[\u0400-\u04FF]+

如果你真的只需要俄语字符,你可以看看上述文件,其中包含用于基本俄语字母表的确切范围,即[\u0410-\u044F]。当然,您还需要考虑扩展西里尔字符,这些字符仅在俄语中使用-在文档中也提到了。

91zkwejq

91zkwejq2#

如果一切都是这样编码的话,使用JG建议的unicode西里尔字符集是可以的。然而,这是垃圾邮件,在大多数情况下,事情不是。此外,垃圾邮件发送者经常在垃圾邮件中混合使用字符集,这进一步破坏了这种方法。
我发现检测俄语垃圾邮件的最好方法(或者至少是过程中的初步步骤)是grep最常用的字符集:

koi8-r
windows-1251
iso-8859-5

接下来的步骤是对剩下的内容尝试一些语言检测算法。如果这是一个足够大问题,使用付费服务,如谷歌翻译(也“检测”)或施乐。这些服务为IMO提供了最好的语言检测。

vsikbqxv

vsikbqxv3#

对于任何登陆这里的人来说,有一个非常不错的perl模块Lingua::Guess来检测字符串的语言。例如,在命令行中,您可以像这样使用它:

echo "Je suis en train d'essayer ce module, et voyons si ça marche bien." | perl -MLingua::Guess -MEncode=decode_utf8 -nlE 'say "Language is ", Lingua::Guess->new->guess( decode_utf8($_) )->[0]->{name}'

将产生:Language is french

echo "このモジュールを上手く使えるかな。" | perl -MLingua::Guess -MEncode=decode_utf8 -nlE 'say "Language is ", Lingua::Guess->new->guess( decode_utf8($_) )->[0]->{name}'

将产生:Language is japanese
在这个例子中,-M加载了perl模块Linguage::Guess,并且模块Encode(一个核心模块)与其函数decode_utf8一起使用,将utf-8字符串解码为perl的内部编码。

相关问题