Определить, является ли электронная почта по существу текстовой - PullRequest
4 голосов
/ 25 февраля 2012

Я пишу надстройку Outlook, которая сохраняет электронную почту для исторических целей.Формат MSG в Outlook, к сожалению, слишком многословен, даже когда сжат.Это приводит к тому, что сохраненные файлы 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 Ответ

2 голосов
/ 22 апреля 2012

Идея: посчитать взвешенную плотность тегов HTML в сообщении.Выберите порог на основе существующих данных.Сообщения с плотностью HTML выше порога сохраняются как MSG;сообщения с плотностью ниже порогового значения сохраняются в виде простого текста.

Как рассчитать взвешенную плотность?Используйте HTML-библиотеку разбора.Пусть он проанализирует документ и посчитает количество каждого типа тега HTML в документе.Это все, что вам нужно из библиотеки.Умножьте каждый тег-счет на его вес и сложите их вместе.Затем попробуйте преобразовать сообщение в простой текст и посчитать количество символов в сообщении.Разделите сумму взвешенных тегов-счетчиков на это число, и вы получите свою плотность.

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

Как выбрать свой порог?Запустите функцию расчета плотности на примере электронных писем.Также вручную просмотрите эти электронные письма, чтобы увидеть, будут ли они лучше в формате MSG или в виде простого текста, и запишите этот выбор для каждого электронного письма.Используйте некоторый алгоритм с этими данными, чтобы найти граничное значение.Я думаю, что алгоритм может быть Наивная байесовская классификация , но в этом случае может быть более простой алгоритм.Или человеческое предположение может быть достаточно хорошим.Я думаю, вы могли бы сделать предположение, посмотрев на диаграмму разброса выбранного человеком формата и взвешенной плотности тегов HTML, и посмотрев на значение плотности, которое приблизительно разделяет два решения о формате.

...