Я много искал по этому поводу, и вот что я нашел. В основном есть две ситуации, в которых вы делаете это: когда у вас есть весь поток, и когда у вас его нет. Я разделю его на две категории:
Когда у вас есть поток:
Если у вас есть вся серия электронных писем, вы можете быть уверены в том, что удаляемый вами текст на самом деле является цитируемым. Есть два способа сделать это. Во-первых, вы можете использовать Message-ID, In-Reply-To ID и Thread-Index для определения отдельного сообщения, его родителя и потока, которому оно принадлежит. Для получения дополнительной информации см. RFC822 , RFC2822 , эту интересную статью о многопоточности или эту статью о многопоточности . После того, как вы повторно собрали поток, вы можете удалить внешний текст (например, строки To, From, CC и т. Д.), И все готово.
Если сообщения, с которыми вы работаете, не имеют заголовков, вы также можете использовать сопоставление схожести, чтобы определить, какие части электронного письма являются текстом ответа. В этом случае вы застряли в сопоставлении схожести, чтобы определить повторяющийся текст. В этом случае вы можете захотеть изучить алгоритм расстояния Левенштейна, такой как этот в Code Project или этот .
Несмотря ни на что, если вас интересует процесс создания цепочек писем , посмотрите этот отличный PDF-файл о повторной сборке цепочек писем .
Когда у вас нет потока:
Если вы застряли только на одном сообщении из цепочки, вам нужно попытаться угадать, что это за цитата. В этом случае я видел различные методы цитирования:
- линия (как видно в Outlook).
- Угловые скобки
- "---Исходное сообщение---"
- «В такой-то день такой-то написал:»
Удалите текст оттуда вниз, и все готово. Обратной стороной любого из них является то, что все они предполагают, что отправитель поместил свой ответ поверх цитируемого текста, а не чередовал его (как это было в старом стиле в Интернете). Если это произойдет, удачи. Надеюсь, это поможет некоторым из вас!