我有一个用Perl写的英语论坛网站,它不断被俄语垃圾邮件轰炸。有没有一种方法使用Perl和regex来检测俄语文本,以便我可以阻止它?
tez616oj1#
您可以使用以下命令来检测Cyrillic字符(用于俄语):
[\u0400-\u04FF]+
如果你真的只需要俄语字符,你可以看看上述文件,其中包含用于基本俄语字母表的确切范围,即[\u0410-\u044F]。当然,您还需要考虑扩展西里尔字符,这些字符仅在俄语中使用-在文档中也提到了。
[\u0410-\u044F]
91zkwejq2#
如果一切都是这样编码的话,使用JG建议的unicode西里尔字符集是可以的。然而,这是垃圾邮件,在大多数情况下,事情不是。此外,垃圾邮件发送者经常在垃圾邮件中混合使用字符集,这进一步破坏了这种方法。我发现检测俄语垃圾邮件的最好方法(或者至少是过程中的初步步骤)是grep最常用的字符集:
koi8-r windows-1251 iso-8859-5
接下来的步骤是对剩下的内容尝试一些语言检测算法。如果这是一个足够大问题,使用付费服务,如谷歌翻译(也“检测”)或施乐。这些服务为IMO提供了最好的语言检测。
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
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的内部编码。
Language is japanese
-M
Linguage::Guess
3条答案
按热度按时间tez616oj1#
您可以使用以下命令来检测Cyrillic字符(用于俄语):
如果你真的只需要俄语字符,你可以看看上述文件,其中包含用于基本俄语字母表的确切范围,即
[\u0410-\u044F]
。当然,您还需要考虑扩展西里尔字符,这些字符仅在俄语中使用-在文档中也提到了。91zkwejq2#
如果一切都是这样编码的话,使用JG建议的unicode西里尔字符集是可以的。然而,这是垃圾邮件,在大多数情况下,事情不是。此外,垃圾邮件发送者经常在垃圾邮件中混合使用字符集,这进一步破坏了这种方法。
我发现检测俄语垃圾邮件的最好方法(或者至少是过程中的初步步骤)是grep最常用的字符集:
接下来的步骤是对剩下的内容尝试一些语言检测算法。如果这是一个足够大问题,使用付费服务,如谷歌翻译(也“检测”)或施乐。这些服务为IMO提供了最好的语言检测。
vsikbqxv3#
对于任何登陆这里的人来说,有一个非常不错的perl模块Lingua::Guess来检测字符串的语言。例如,在命令行中,您可以像这样使用它:
将产生:
Language is french
将产生:
Language is japanese
在这个例子中,
-M
加载了perl模块Linguage::Guess
,并且模块Encode(一个核心模块)与其函数decode_utf8一起使用,将utf-8字符串解码为perl的内部编码。