1

我每周都会收到几封电子邮件,详细说明源自我参与的网络的滥用活动。这些通常包含:

a) 被视为已泄露的 URL。

或者

b) 被视为垃圾邮件的电子邮件副本。

其中大部分是自动化的,通常不会很好地遵循 ARF。

我需要的是自动数据提取,但我正在绞尽脑汁,因为当电子邮件的结构发生变化且不可预测时,我不太确定该怎么做。

我现在要提取的是:

a) 垃圾邮件的原始邮件服务器(以及 UID/用户名,显示在大多数 Exim/Qmail 接收的标头中)

b) 域名

c) 受感染网站的 URL

d) 电子邮件地址

我可以使用一些正则表达式和一些其他垃圾来毫不费力地做到这一点,但基本上它是不可靠的。通过解析电子邮件正文,我最终可能会得到 5 个 IP、3 个 URL 和 3 个电子邮件地址,我不确定如何自动选择最合适的。

我需要一些关于我应该研究/寻找什么的方向,以便对正确的数据做出最好的自动判断。我有超过 100,000 封过去的报告电子邮件,所以不乏测试数据,我只需要知道如何开始以及解决这个问题应该研究什么。

感谢您花时间阅读本文,如果我遗漏了什么或有其他问题,请告诉我:)

仅供参考,我考虑了以下几点:

  • 插入来自该发件人的几封已分类的过去电子邮件,然后对新电子邮件进行设置差异。除了使用 python 集合 + 列表对一些算法进行硬编码之外,我不知道最好的方法。

  • 将我以前的所有数据绘制到各种形式的 ScatterPlot/Histogram 上。然后,我将能够根据现有数据测试每封新电子邮件,并挑选出图表中最不占优势的细节。再一次,我不确定我应该在这里寻找哪些库。

  • 使用样本数据对以前看到的项目进行加权。即,如果我放置一个包含 1000 个先前样本的页面,并“标记”永远不会正确的 IP,并标记可能正确的 IP。

  • 编写一堆涉及套接字查找的代码来解析主机名并将项目匹配在一起。我知道这将是密集的运行,但它很可能会得到最好的结果。

干杯!

4

1 回答 1

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% 进行比较,看看它的表现如何。如果您获得高水平的准确性,那就太好了!你完成了。如果它仍然很低,您将需要定义其他特征来帮助分类器正确区分。只有你才能决定多高多低。

于 2012-12-11T03:49:52.763 回答