Алгоритм отделения бессмысленного текста от осмысленного текста - PullRequest
8 голосов
/ 02 февраля 2009

Я предоставил некоторым своим программам функцию обратной связи. К сожалению, я забыл включить какую-то защиту от спама - чтобы пользователи могли отправлять все, что они хотели, на мой сервер - где каждый отзыв хранится в огромной базе данных.

Вначале я периодически проверял эти отзывы - я отфильтровал то, что можно было использовать, и удалил мусор. Проблема в том, что я получаю 900 отзывов в день. Только 4-5 действительно полезны, остальные сообщения в основном 2 типа бреда:

  • ерунда: jfvgasdjkfahs kdlfjhasdf (Люди, ломающие голову на клавиатуре)
  • язык, который я не понимаю

Что я сделал до сих пор:

  1. Я установил фильтр для удаления любых отзывов, содержащих «asdf», «qwer» и т. Д. -> только 700 в день

  2. Я установил фильтр слов для удаления всего, что содержит нецензурную лексику -> 600 в день (не спрашивайте, но там много странных людей)

  3. Я отфильтровываю любые сообщения, содержащие буквы, которые не используются на моем языке -> 400 в день

Но 400 в день все еще слишком много. Поэтому мне интересно, сталкивался ли кто-нибудь с такой проблемой раньше и знает какой-то алгоритм для фильтрации бессмысленных сообщений.

Любая помощь будет принята с благодарностью!

Ответы [ 11 ]

12 голосов
/ 02 февраля 2009

Немного другой подход заключается в настройке системы для отправки сообщений обратной связи в учетную запись и использования стандартной фильтрации спама. Вы можете отправить их через gmail и позволить их фильтрации сделать это. Не идеально, но не слишком много усилий для реализации.

12 голосов
/ 02 февраля 2009

Как насчет использования существующей реализации фильтра байесовского спама вместо реализации собственной. У меня были хорошие результаты с DSpam

6 голосов
/ 02 февраля 2009

Вы можете попробовать байесовский алгоритм, используемый многими фильтрами спама.

Лучшая байесовская фильтрация

Объяснение Википедии

Некоторые с открытым исходным кодом

6 голосов
/ 02 февраля 2009

Если вы ожидаете (или беспокоитесь) о комментариях на английском языке, то почему бы просто не подсчитать количество допустимых слов (по отношению к какому-либо словарю) в загруженной обратной связи. Если число проходит некоторый порог, примите обратную связь. Если нет, то отбросьте это. Эту простую эвристику можно распространить на другие языки, добавив их словари.

5 голосов
/ 02 февраля 2009

У меня была проблема со спамом в функции гостевой книги на одном из моих сайтов (довольно давно). Мое решение было просто добавить маленькое поле для вопросов и ответов, похожее на капчу и спросить пользователя: «Вы спам-робот?» Любой ответ, содержащий слова «нет» (пропуская «нет, я не», «нет» и «совсем нет», просто для удовольствия ...), позволял пользователю публиковать сообщения ...

Причина, по которой я решил не использовать капчу, заключалась в том, что мои пользователи хотели, чтобы сайт чувствовал себя более уютно, а капча была слишком формальной. Это было более личное =)

3 голосов
/ 02 февраля 2009

Самый простой способ - подсчитать вхождение каждой буквы. Буква E - это самая распространенная буква на английском языке, поэтому ее следует использовать чаще всего. Вы также можете проверить частоту слов и орграфа. Взгляните здесь , чтобы получить список наиболее часто используемых на английском языке

2 голосов
/ 08 февраля 2009

Мы с Фиделисом Ассисом адаптировали спам-фильтр OSBF-Lua , чтобы его можно было легко адаптировать к другим приложениям, включая веб-приложения. Этот спам-фильтр три года подряд побеждает в конкурсе спама TREC. (Я не против хвастовства, потому что алгоритм принадлежит Фиделису, а не моему.)

Если вы хотите попробовать, у нас есть код «почти бета» на

git clone http://www.cs.tufts.edu/~nr/osbf-lua-temp

Мы еще далеки от получения аккуратного релиза, но код должен собираться при условии, что вы устанавливаете automake 1.9. Любой из нас с радостью посоветует вам, как использовать его для очистки вашей базы данных и интеграции в ваше приложение.

2 голосов
/ 02 февраля 2009

Посмотрите на модели Клода Шеннона и Маркова. Это приводит к статистическому методу оценки вероятностей того, что буквенные комбинации происходят из определенного языкового источника.

Здесь - некоторые заметки о курсе из Принстонского университета.

0 голосов
/ 08 февраля 2009

Просто сохраните комментарии в состоянии ожидания, пропустите их через Akismet или Defensio и используйте ответ, чтобы пометить их как потенциальный спам или пометить их как активные.

http://akismet.com/

http://defensio.com/

Я лично предпочитаю API Defensio, но они оба работают фантастически хорошо.

0 голосов
/ 08 февраля 2009

Да, как указывали люди, вы можете посмотреть на спам-фильтры или марковские модели.

Что-то проще было бы просто посчитать разные слова в каждом ответе и отсортировать по частоте. Если слова, подобные приведенным ниже, не указаны сверху, то, вероятно, это неверный текст:

, a , в , из , и , или, ...

Это наиболее часто используемое слово в любом обычном английском тексте.

...