2009-09-09 110 views
5

我有一個用perl編寫的英語論壇網站,它不斷地用俄語攻擊垃圾郵件。有沒有使用Perl和正則表達式來檢測俄文文本的方法,以便我可以阻止它?如何使用Perl檢測俄羅斯垃圾郵件?

+3

要檢測俄語,您需要查找僅用於俄語的單詞。或者你只是想測試西裏爾字母? – Gumbo 2009-09-09 08:06:40

+8

if($ text〜=/vodka /){$ language =「ru」; } – tunnuz 2009-09-09 08:08:21

+0

@Gumbo只是檢測西里爾文是足夠好的,因爲論壇是英文無論如何。 – 2009-09-09 08:20:04

回答

8

您可以使用以下方法來檢測Cyrillic字符(在俄羅斯使用):

[\u0400-\u04FF]+ 

如果你真的只是想俄文字符,你可以看看上述文件,其中包含使用的確切範圍對於基本的俄文字母表是[\u0410-\u044F]。當然你還需要考慮在俄文中專門使用的擴展西里爾文字符 - 也在文檔中提到。

3

使用由JG建議的unicode西里爾文字符集很好,如果一切都編碼如此。然而,這是垃圾郵件,大部分情況並非如此。此外,垃圾郵件發送者通常會在垃圾郵件中使用混合字符集,這進一步推高了這種方法。

我覺得最好的方式(或至少在過程中的初步步驟)的檢測俄羅斯垃圾郵件是用grep爲最常用的字符集:

koi8-r 
windows-1251 
iso-8859-5 

下一步後會嘗試一些語言檢測算法仍然存在。如果這是一個足夠大的問題,請使用付費服務,如谷歌翻譯(也「檢測」)或施樂。這些服務爲IMO提供最佳的語言檢測。

+0

我明白你的意思,但是因爲它是英文論壇,所以檢測一篇文章是否包含西里爾文字符可能足以確定它是垃圾郵件。 – 2009-09-09 17:42:49

+0

嗯,我*是*認爲原來的海報是在談論電子郵件垃圾郵件......如果情況並非如此,並且垃圾郵件是通過網站本身輸入的(例如在論壇上),那麼我會同意你的意見話說。 – 2009-09-10 17:11:41