495 читателей, 88 постов
Администрация
Модераторы
Спам и антиспам.

public string CheckWord(string word, out string lang, out bool Changes)
{
lang = "?";
string newword = word;
string OnlyRu = "БбвГгДдЁёЖжЗзИиЙйЛлмнПптУФфЦцЧчШшЩщЪъЫыЬьЭэЮюЯя";
string OnlyEn = "DdFfGghIiJjLlNQqRrSstUVvWwYZz";
string Rus = "АаВЕеКкМНОоРрСсТуХхЗО1тиа@пь";
string Eng = "AaBEeKkMHOoPpCcTyXx30imu@anb";
bool IsRu100percent = false;
foreach (char c1 in word)
foreach (char c2 in OnlyRu)
IsRu100percent = IsRu100percent || (c1 == c2);
if (IsRu100percent)
{
lang = "ru";
//Конвертируем все сомнительные символы в русские
for (int i = 0; i < word.Length; i++)
if (Eng.IndexOf(word[i]) >= 0)
{
//помечаем word[i] как "фальшивый"
}
for (int i = 0; i < Rus.Length; i++)
newword = newword.Replace(Eng[i], Rus[i]);
}
else
{
bool IsEn100percent = false;
foreach (char c1 in word)
foreach (char c2 in OnlyEn)
IsEn100percent = IsEn100percent || (c1 == c2);
if (IsEn100percent)
{
lang = "en";
//Конвертируем все сомнительные символы в английские
for (int i = 0; i < word.Length; i++)
if (Rus.IndexOf(word[i]) >= 0)
{
//помечаем word[i] как "фальшивый"
}
for (int i = 0; i < Eng.Length; i++)
newword = newword.Replace(Rus[i], Eng[i]);
}
}
//Были ли замены?
Changes = newword != word;
newword = newword.ToLower();
_SelectionColor = lang == "ru" ? Color.Red : lang == "en" ? Color.Blue : Color.Black;
return newword;
}
* This source code was highlighted with Source Code Highlighter.
string lang;
bool changes;
string re = "[\\w\\@]+";
Regex rx = new Regex(re, RegexOptions.IgnoreCase | RegexOptions.Singleline);
Match m = rx.Match("Пpoдaeм бeтoн");
while (m.Success)
{
string newWord = CheckWord(m.ToString(), out lang, out changes);
m = m.NextMatch();
}
* This source code was highlighted with Source Code Highlighter.
комментарии (31)
В голову приходит только написание какого-нибудь плагина для аутглюка, который будет делать предварительное преобразование неправильных слов в правильные во входящих письмах до срабатывания фильтра на ключевые слова…
На php, как я понял, портировать ее просто.
Оконный вид программы с подсветкой слов — исключительно для наглядности работы функции.
В_И_А_Г_Р_А
Виа(гра)
ВИ/\ГР/\
Не говоря уже о том, что много спама валит без прямого указания там ключевых слов.
Пока компы не научатся понимать смысл текста (читай: пока не будет создан ИИ), спамеры всегда смогут придумать как обойти подобные фильтры.
Но все равно спасибо, что занимаетесь этой темой. Надо держать спамеров в тонусе :)
На примере: фильтровал я как-то комментарии на сайте развлекательной тематики. Простой список стоп-слов позволили заблокировать процентов 90 нарушителей. После того как я перед проверкой стал удалять все символы кроме букв и цифр (тем самым отсекая варианты типа «В_И_А_Г_Р_А» или «Виа(гра)»), стало отсеиваться 98%. Остальные проверки были совсем специфическими и добавлялись на конкретные случаи, под настроение. В принципе, это — вариант, на котором можно остановится, все остальное пока проще изредка вычищать вручную.
Ещё подскажу: «m» похожа на маленькую русскую «т», но это, как и «6»-«б» бросается в глаза.
И обновил скриншот
Например, «bl» = «Ы», "/\" — «Л»
Собственно сам факт того что в слове из 5 букв русского алфавита есть две буквы из латинского уже определяет то что слово — паразит.
А за наглядный пример нормализации текста спасибо.
Уж не языка-ли?
narod.ru/disk/18479522000/!likes.xml.html
string Rus = «АаВЕеКкМНОоРрСсТуХхЗО1тиа@пь930»;
string Eng = «AaBEeKkMHOoPpCcTyXx30imu@anbgEo»;