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.