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