Извлечение ответов из писем с Talon
Извлечение ответов из писем с Talon
Чистый новый текст из цепочки переписки библиотекой Talon
Зачем Talon?
В переписке накапливаются цитаты, которые заслоняют новый текст. В автоматической обработке почты нужен только новый фрагмент, а не вся история.
Talon выделяет чистый ответ за счёт сопоставления шаблонов и разбора структуры HTML/текста.
Сценарии
- AI-агенты почты: новые реплики пользователя без полного треда
- Автоматизация: разбор ответов на предмет действий
- Анализ тредов: вклад каждого участника отдельно
- Inbox: обрабатывать только новую информацию в ответах
Почему Talon
Gmail, Outlook, Apple Mail, Thunderbird и др.
93.8% на 64 реальных тестах
Английский, японский, шведский, польский, голландский, немецкий
~1.92 ms в среднем, ~488 писем/с
Как устроен Talon
Два подхода в зависимости от формата письма.
Текст (конвейер из 6 этапов)
- Классификация строк: метки
't'текст,'m'цитата,'s'разделитель,'e'пустая - Шаблоны: regex по последовательностям меток
- Извлечение: удаление цитат, остаётся новый текст
Распознаётся:
- префиксы
> - заголовки ответов («On [date] [name] wrote:»)
- пересылки («-----Original Message-----»)
HTML (8 этапов)
- Структурное удаление: известные блоки цитат (Gmail, blockquote, Outlook)
- Запасной путь: нестандартный HTML → строки → те же текстовые правила → вырезание в HTML
Режим
Удаление цитат (основной)
- убирает процитированные ответы из треда
- без отдельной инициализации
- правила и шаблоны
Быстрый старт
Производительность и точность
Тесты на 64 реальных письмах из разных клиентов и языков.
Сводка
Покрытие
- 22 HTML: Gmail, Outlook, Apple Mail, Thunderbird, Mail.ru, Hotmail
- 42 plain text: разные форматы ответов
- 6+ языков: английский, японский, шведский, польский, голландский, немецкий
- Мобильные клиенты: iPhone, Android, подписи «Sent from»
Время по сложности
Скорость и точность
Вывод: ~2 ms в среднем для бэкенда обычно пренебрежимо мало; даже ~21 ms быстрее типичного сетевого запроса.
Ограничения
4 из 64 тестов не прошли. Ниже разбор.
Провалившиеся кейсы (4)
Кейс 1: сложный тред со смешанным содержимым
Вход:
Ожидалось: только первые 5 строк (до Christopher Edwards)
Фактически: весь текст, включая цитату с «On Mon, Jun 3…» и строки >
Время: 2.55 ms
Причина: подпись перед цитатой сбивает эвристики
Кейс 2: встроенные ответы внутри цитаты
Вход:
Ожидалось: только I will reply under this one и and under this.
Фактически: весь фрагмент, включая заголовок «On Tue, Apr 29…» и цитаты
Время: 0.48 ms
Причина: встроенные ответы между строками > не распознаны как новый текст
Кейс 3: пересылка Gmail (HTML)
Вход:
Ожидалось: только testblah (до маркера пересылки)
Фактически: остаётся «---------- Forwarded message ----------» и тело пересылки
Время: 3.41 ms
Причина: HTML-заголовки пересылки Gmail не вырезаются как цитата
Кейс 4: пересылка Thunderbird (HTML)
Вход:
Ожидалось: пусто (только пересылка, без нового текста)
Фактически: остаётся «-------- Forwarded Message --------» и пересылаемое содержимое
Время: 4.34 ms
Причина: класс Thunderbird moz-forward-container не распознан
Итог: 3 из 4 провалов — пересылки. Обычные ответы — точность 98%+.
Успешные примеры
Пример 1: простой ответ Gmail
Вход:
Результат Talon: Awesome! I haven't had another problem with it.
Время: 0.2 ms
Почему сработало: шаблон «On [date] [name] wrote:» и маркеры >
Пример 2: Outlook с линией-разделителем
Вход:
Результат: Outlook with a reply directly above line
Время: 0.51 ms
Почему: линия подчёркиваний и заголовки From/Sent как разделитель
Пример 3: HTML Outlook
Вход:
Результат: Reply
Время: 4.02 ms
Почему: удалён блок Outlook OLK_SRC_BODY_SECTION
Talon и более простые библиотеки
Talon тяжелее, но покрывает HTML и сложные кейсы.
- Talon: ~1.92 ms (с HTML)
- email-reply-parser: ~0.03 ms (в основном текст)
Для сервера задержка Talon обычно мала по сравнению с сетью.
Пересылки
Пересылки, особенно HTML, — слабое место:
- Текстовые пересылки часто ок
- HTML может оставлять заголовки пересылки
- Обходной путь: извлечение из plain text или постобработка маркеров forward
Обработка ошибок
Оборачивайте разбор в try/except:
Тестирование
Проверяйте на своих реальных форматах:
Прогоняйте реальные письма из тех клиентов, что у ваших пользователей: уникальные шаблоны бывают вне обучающей выборки Talon.
Вариант на JavaScript
Для TypeScript/JavaScript — TalonJS (порт Talon).
Сравнение
TalonJS чуть быстрее в бенчмарке и удобен в JS-стеке.
Быстрый старт
TalonJS или Python Talon:
- TalonJS — если стек TS/JS и достаточно ~90.6% точности
- Python Talon — если нужна максимальная точность или уже Python
- Разница ~3 п.п. для многих сценариев приемлема
