Я набагато більше займався цим, і ось що я знайшов. В основному є дві ситуації, коли ви робите це: коли у вас є ціла нитка, а коли у вас немає. Я поділю це на ці дві категорії:
Коли у вас є нитка:
Якщо у вас є ціла серія електронних листів, ви можете досягти дуже високого рівня впевненості, що те, що ви видаляєте, насправді є цитованим текстом. Це можна зробити двома способами. По-перше, ви можете використовувати ідентифікатор повідомлення, ідентифікатор відповіді та індекс потоку повідомлення, щоб визначити окреме повідомлення, його батьківське повідомлення та потік, якому воно належить. Для отримання додаткової інформації про це дивіться RFC822 , RFC2822 , цю цікаву статтю про різьбу або цю статтю про різьбу . Після того, як ви заново зібрали потік, ви можете видалити зовнішній текст (наприклад, До, Від, CC тощо) і все готово.
Якщо повідомлення, з якими ви працюєте, не мають заголовків, ви також можете скористатися відповідністю подібності, щоб визначити, які частини електронного листа є текстом відповіді. У цьому випадку ви застрягли в порівнянні подібностей, щоб визначити текст, який повторюється. У цьому випадку вам може знадобитися вивчити алгоритм відстані Левенштейна, такий як цей на Code Project або цей .
Незважаючи ні на що, якщо ви зацікавлені в процесі потокової роботи, перегляньте цей чудовий PDF-файл про повторне збирання ланцюжків електронної пошти .
Коли у вас немає теми:
Якщо у вас застрягло лише одне повідомлення з потоку, вам доведеться спробувати вгадати, що це за цитата. У цьому випадку, ось різні методи котирування, які я бачив:
- лінія (як видно з перспективи).
- Кутові дужки
- "--- Оригінальне повідомлення ---"
- "У такий-то день такий-то писав:"
Видаліть текст звідти вниз і все готово. Недоліком будь-якого з них є те, що всі вони припускають, що відправник розмістив свою відповідь поверх цитованого тексту і не переміщував його (як це було в старому стилі в Інтернеті). Якщо це станеться, удачі. Сподіваюся, це допоможе комусь із вас там!