Обнаружение спамеров с MySQL - PullRequest
       18

Обнаружение спамеров с MySQL

4 голосов
/ 15 февраля 2012

Я вижу, что все больше пользователей регистрируются на моем сайте, чтобы просто отправлять дублирующиеся СПАМ-сообщения другим пользователям. Я добавил некоторый серверный код для обнаружения дублирующихся сообщений с помощью следующего запроса mysql:

  SELECT count(content) as msgs_sent 
    FROM messages 
   WHERE sender_id = '.$sender_id.' 
GROUP BY content having count(content) > 10

Запрос работает хорошо, но теперь они обходят это, изменяя несколько символов в своих сообщениях. Есть ли способ обнаружить это с MySQL или мне нужно посмотреть на каждую группу, возвращенную из MySQL, а затем использовать PHP, чтобы определить процент сходства?

Есть мысли или предложения?

1 Ответ

3 голосов
/ 15 февраля 2012

Полнотекстовое соответствие

Вы можете посмотреть на реализацию чего-то похожего на MATCH пример здесь :

mysql> SELECT id, body, MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root') AS score
    -> FROM articles WHERE MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root');
+----+-------------------------------------+-----------------+
| id | body                                | score           |
+----+-------------------------------------+-----------------+
|  4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |
|  6 | When configured properly, MySQL ... | 1.3114095926285 |
+----+-------------------------------------+-----------------+
2 rows in set (0.00 sec)

Итак, для вашего примера, возможно:

SELECT id, MATCH (content) AGAINST ('your string') AS score
FROM messages 
WHERE MATCH (content) AGAINST ('your string')
    AND score > 1;

Обратите внимание, что для использования этих функций ваш столбец content должен иметь индекс FULLTEXT.

Что такое score в этом примере?

Это relevance value. Он рассчитывается с помощью процесса, описанного ниже:

Каждое правильное слово в коллекции и в запросе взвешивается в соответствии с его значением в коллекции или запросе. Следовательно, слово, которое присутствует во многих документах, имеет более низкий вес (и может даже иметь нулевой вес), потому что он имеет более низкий семантическая ценность в этой конкретной коллекции. И наоборот, если слово редко, он получает больший вес. Вес слов комбинируется для вычисления релевантности строки.

Со страницы документации .

...