2012-02-20 5 views
1

Я получаю небольшое количество писем в неделю, подробно описывающих оскорбительную активность, происходящую из сети, с которой я связан. Они обычно содержат либо:Python + Scattergraphs + Other ерунда

a) URL-адрес, который считается скомпрометированным.

или

б) копия письма, которое считается спамом.

Большинство из них автоматизированы и, как правило, не очень хорошо следуют за ARF.

Мне нужно автоматическое извлечение данных, но я ломаю голову, потому что я не уверен, как это сделать, когда структура электронной почты меняется и непредсказуема.

То, что я ищу, чтобы извлечь на данный момент:

а) Возникнув почтовых серверов для спама (а также UID/Имя пользователя, который показан в большинстве Exim/Qmail Полученные заголовки)

б) доменные имена

с) URL-адрес для взломанных сайтов

д) адрес электронной почты

Я могу сделать это без какого-пота не используя некоторые регулярных выражений и немного другого барахла, но в основном это ненадежно. Разбирая тело электронной почты, я могу получить 5 IP-адресов, 3 URL-адреса и 3 адреса электронной почты, и я не уверен, как автоматически выбрать наилучший вариант.

Мне нужно какое-то направление в отношении того, что я должен исследовать/искать, чтобы сделать лучшее автоматическое суждение о том, что такое правильные данные. У меня более 100 000 прошлых сообщений электронной почты, поэтому нет недостатка в тестовых данных, мне просто нужно знать, как начать работу и что я должен изучать, чтобы решить эту проблему.

Спасибо, что нашли время, чтобы прочитать это, пожалуйста, дайте мне знать, если я что-то пропустил или если есть другие вопросы :)

FYI, я рассмотрел следующее:

  • Insersecting несколько прошлых писем от этого отправителя, которые были классифицированы, а затем выполняли определенную разницу с новым письмом. Я понятия не имею о том, как это сделать, хотя помимо жесткого кодирования некоторые алгоритмы используют наборы python + lists.

  • Построение всех моих предыдущих данных на различные формы ScatterPlot/Histogram. Затем я смогу протестировать каждое новое электронное письмо против существующих данных и выберет детали, которые наименее превалируют внутри графика. Еще раз, я не уверен, какие библиотеки я должен искать здесь.

  • Использование данных образца для определения веса против ранее увиденных предметов. То есть Если я выложу страницу из 1000 предыдущих образцов и «пометку» IP-адресов, которые никогда не будут правильными, и маркировка IP-адресов, которые могут быть правильными.

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

Cheers!

+0

Я сомневаюсь, что есть простой подход, который даст вам отличные результаты, но я бы попытался написать что-то, чтобы обнаружить шаблон пересылаемой электронной почты. Большинство программ электронной почты добавляет очень предсказуемые функции для переадресованных сообщений, и определение такого сообщения даст * context * для UID/URL-адресов/доменов/адресов, которые вы уже можете извлечь. – Beta

ответ

0

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

Прежде всего вам нужно будет создать образец данных, который является «истиной» или должным образом классифицирован, и в котором перечислены оскорбительные IP-адреса, URL-адрес, адрес электронной почты и т. Д. Поэтому определите некоторые категории и некоторые релевантные данные и пройдите через него , Это не весело, но это необходимо.

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

Байесовская классификация - это черный ящик, в который вы подаете кучу (скажем, 1/2 или 2/3) ваших тестовых данных, а затем попробуйте на этом отдыхе, чтобы посмотреть, как работает обученный классификатор. Если вы получаете что-то в 90% плюс диапазон, который вы делаете, при условии, что он достаточно быстр. Единственной функцией, которую вы должны вывести, является каждый «токен» в письме. Разделить на пробелы. Вы можете начать здесь:

http://nltk.googlecode.com/svn/trunk/doc/api/nltk.classify-module.html

Если вы решили сделать функцию инженерию, теперь вы входите в разведочной фазу. Всякий раз, когда вы выполняете машинное обучение или классифицируете по шаблону, вам необходимо определить «функции», которые вы можете извлечь из исходных данных. Как вы сказали, вы можете использовать регулярные выражения для получения адресов электронной почты, IP-адресов и URL-адресов. Все это отличные функции. Какие еще функции вы можете найти? Возможно, некоторые временные метки (есть ли временные отношения? Кто знает?). Некоторые из заголовков электронной почты могут быть полезны, например, MIME-версия, SenderID, ContentType, X-Spam-Level, кодировка и т. Д.

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

С определением новых функций вы можете пройти тренировку на 50%, а затем оценить результаты против других 50%, чтобы увидеть, как она выполняется. Если вы получите высокий уровень точности, отлично! Все готово. Если он еще невелик, вам нужно будет определить другие функции, чтобы помочь классификатору правильно распознать. Только вы сможете решить, насколько высока и насколько низкая.