检测电子邮件是否基本上是文本

时间:2012-02-24 23:05:57

标签: email outlook vsto email-client heuristics

我正在编写一个Outlook加载项,用于保存电子邮件以用于历史目的。不幸的是,Outlook的MSG格式过于冗长,即使在压缩时也是如此。这会导致保存的MSG文件的大小与其等效文本的大小相当。但是,将所有邮件保存为文本存在明显的缺陷,即缺少附件,图像和任何相关格式。

对于大多数电子邮件而言,这不是问题,但是具有一定程度复杂格式,图片,附件(等等)的电子邮件应该以MSG格式保存。

大多数用户的电子邮件都是以HTML格式发送的,我的算法大致如下:

1. If email has attachment(s), save as MSG and be done
2. If email is stored as text, save as text and be done
3. If email is not stored as HTML store as MSG and be done
4. Decide if the HTML should be converted to text and
     store it as text if so
     store it as MSG if not

除了步骤4之外,这很简单:如何确定在保存时应将HTML格式的电子邮件转换为哪种格式?

1 个答案:

答案 0 :(得分:2)

一个想法:计算消息中HTML标签的加权密度。根据现有数据选择阈值。 HTML密度高于阈值的消息将存储为MSG;密度低于阈值的消息将以纯文本格式存储。

您如何计算加权密度?使用HTML解析库。让它解析文档并计算文档中每种类型的HTML标记的数量。这就是图书馆所需要的一切。将每个标签数乘以其重量并将它们相加。然后尝试将邮件转换为纯文本并计算邮件中的字符数。将加权标签计数总和除以该数字,即可获得密度。

密度应该加权多少?通过您创建的表格,以及每种HTML标记的重要性。我猜想失去大胆和斜体也不算太糟糕。丢失有序和无序列表列表会更糟糕,除非在将消息转换为纯文本时保留项目符号和数字。表格应加权,因为它们对格式很重要。为无法识别的标签选择一个重量。

您应该如何选择门槛?在电子邮件样本上运行密度计算功能。还要手动检查这些电子邮件,看看它们是否会更好地用作MSG或纯文本,并为每封电子邮件写下该选项。使用该数据的某些算法来查找边界值。我认为该算法可能是Naive Bayes classification,但在这种情况下可能会有一个更简单的算法。或者人类计算的猜测可能已经足够好了。我认为你可以在查看人类选择格式与加权HTML标签密度的散点图之后进行猜测,并注意大致将两种格式决策分开的密度值。