Extraction Intelligente des Citations d'Emails HTML avec Talon en Python

Pour traiter efficacement les emails HTML, il est crucial d'éliminer les citations superflues générées lors des réponses et transferts. La bibliothèque Talon, via son module html_quotations, permet de réaliser cette tâche avec un code minimal. Voici comment l'utiliser.

Configuration Initiale

Assurez-vous d'avoir installé Talon et ses dépendances. Le module repose sur lxml pour le parsing HTML.

Extraction de Base

Le code suivant supprime les citations de style Gmail :

from talon import html_quotations
import lxml.etree

def nettoyer_email(contenu_html):
    arbre = lxml.etree.HTML(contenu_html)
    html_quotations.cut_gmail_quote(arbre)
    return lxml.etree.tostring(arbre, encoding='unicode').strip()

La fonction cut_gmail_quote cible spécifiquement les blocs div.gmail_quote. Talon inclut d'autres fonctions adaptées à divers clients mail.

Prise en Charge Multiple

Pour gérer différentes sources, combinez les fonctions dédiées :

from talon import html_quotations
import lxml.etree

def extraire_contenu_principal(html_source):
    doc = lxml.etree.HTML(html_source)
    
    extracteurs = [
        html_quotations.cut_microsoft_quote,
        html_quotations.cut_zimbra_quote,
        html_quotations.cut_blockquote,
        html_quotations.cut_by_id,
        html_quotations.cut_from_block
    ]
    
    for fonction in extracteurs:
        if fonction(doc):
            break
    
    return lxml.etree.tostring(doc, method='html', encoding='unicode')

Ce script applique séquentiellement les fonctions jusqu'à en trouver une efficace. Chaque fonction correspond à un format spécifique :

  • cut_microsoft_quote : gère les citations d'Outlook avec leurs séparateurs variés.
  • cut_blockquote : cible les balises <blockquote> standard.
  • cut_by_id : identifie les sections par ID (ex : OLK_SRC_BODY_SECTION).
  • cut_from_block : reconnaît les blocs commençant par "From:".

Implémentation Avancée

Pour une extraction plus robuste, intégrez une logique de détection basée sur le contenu :

import lxml.etree
from talon import html_quotations

def analyser_et_extraire(texte_html):
    racine = lxml.etree.HTML(texte_html)
    
    # Détection et suppression itérative
    transformations = [
        ('gmail', html_quotations.cut_gmail_quote),
        ('outlook', html_quotations.cut_microsoft_quote),
        ('zimbra', html_quotations.cut_zimbra_quote),
        ('generique', html_quotations.cut_blockquote)
    ]
    
    for etiquette, transformateur in transformations:
        if transformateur(racine):
            print(f"Citation de type {etiquette} supprimée.")
            break
    
    return lxml.etree.tostring(racine, pretty_print=True, encoding='unicode')

Cette version ajoute une journalisation simple et utilise un format de sortie indenté pour une meilleure lisibilité.

Notes d'Utilisation

Le module html_quotations se trouve dans le fichier source talon/html_quotations.py. Pour des cas d'usage complexes, consultez les tests unitaires associés pour comprendre les cas limites et les formats supportés.

Étiquettes: talon HTML Python email-processing quote-extraction

Publié le 6 juin à 08h10