mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-16 03:57:47 +01:00
151 lines
5.3 KiB
Python
151 lines
5.3 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import re
|
|
|
|
def clean_html(html_content):
|
|
"""
|
|
Nettoie le contenu HTML pour le Markdown.
|
|
Supprime les balises, les bas de page, les messages automatiques et les sections vides.
|
|
"""
|
|
if not html_content:
|
|
return ""
|
|
|
|
# Supprimer les balises simples
|
|
html_content = re.sub(r'<br\s*/?>|<p>|</p>|<div>|</div>', '\n', html_content)
|
|
|
|
# Supprimer les bas de page et messages automatiques du support
|
|
html_content = re.sub(r'Droit à la déconnexion :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL)
|
|
html_content = re.sub(r'\*\s*\*\s*\*.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL)
|
|
html_content = re.sub(r'Ce message électronique et tous les fichiers.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL)
|
|
html_content = re.sub(r'Afin d\'assurer une meilleure traçabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL)
|
|
html_content = re.sub(r'_Confidentialité :.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL)
|
|
html_content = re.sub(r'Support technique.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL)
|
|
|
|
# Suppression de l'image signature CBAO et autres images
|
|
html_content = re.sub(r'!\[CBAO - développeur de rentabilité.*?(?=\n\n|\Z)', '', html_content, flags=re.DOTALL)
|
|
html_content = re.sub(r'!\[.*?\]\(/web/image/.*?\)', '', html_content)
|
|
html_content = re.sub(r'!\[cid:.*?\]\(/web/image/.*?\)', '', html_content)
|
|
|
|
# Supprimer toutes les références d'images avec des URLs
|
|
html_content = re.sub(r'!\[.*?\]\(http[s]?://.*?\)', '', html_content)
|
|
|
|
# Supprimer les URL "mailto:" qui restent
|
|
html_content = re.sub(r'\[.*?\]\(mailto:.*?\)', '', html_content)
|
|
|
|
# Supprimer les liens qui pointent vers des sites web
|
|
html_content = re.sub(r'\[.*?\]\(https?://.*?\)', '', html_content)
|
|
|
|
# Supprimer les lignes qui contiennent "Envoyé par" suivi d'un lien
|
|
html_content = re.sub(r'Envoyé par .*$', '', html_content, flags=re.MULTILINE)
|
|
|
|
# Supprimer les balises HTML restantes
|
|
html_content = re.sub(r'<.*?>', '', html_content)
|
|
|
|
# Remplacer les entités HTML courantes
|
|
html_content = html_content.replace(' ', ' ')
|
|
html_content = html_content.replace('<', '<')
|
|
html_content = html_content.replace('>', '>')
|
|
html_content = html_content.replace('&', '&')
|
|
html_content = html_content.replace('"', '"')
|
|
|
|
# Supprimer les lignes avec uniquement des **
|
|
html_content = re.sub(r'^\s*\*\*\s*\*\*\s*$', '', html_content, flags=re.MULTILINE)
|
|
html_content = re.sub(r'^\s*\*\*\s*$', '', html_content, flags=re.MULTILINE)
|
|
|
|
# Supprimer le \--- à la fin des messages
|
|
html_content = re.sub(r'\\---\s*$', '', html_content)
|
|
|
|
# Supprimer les crochets isolés
|
|
html_content = re.sub(r'\[\s*$', '', html_content)
|
|
|
|
# Supprimer les lignes vides multiples
|
|
html_content = re.sub(r'\n\s*\n', '\n\n', html_content)
|
|
|
|
# Nettoyer au début et à la fin
|
|
html_content = html_content.strip()
|
|
|
|
# Supprimer les sections vides (comme "*Contenu vide*")
|
|
if not html_content or html_content.lower() == "*contenu vide*":
|
|
return "*Contenu vide*"
|
|
|
|
return html_content
|
|
|
|
def clean_text(text_content):
|
|
"""
|
|
Nettoie le texte brut pour supprimer les éléments indésirables.
|
|
"""
|
|
if not text_content:
|
|
return ""
|
|
|
|
# Supprimer les éléments de signature de messagerie
|
|
patterns = [
|
|
r"De :.*\nEnvoyé :.*\nÀ :.*\nObjet :.*\n",
|
|
r"From:.*\nSent:.*\nTo:.*\nSubject:.*\n",
|
|
r"----+ ?Original Message ?----+\n",
|
|
r".*wrote:$",
|
|
r"^On .* wrote:$"
|
|
]
|
|
|
|
for pattern in patterns:
|
|
text_content = re.sub(pattern, "", text_content, flags=re.MULTILINE)
|
|
|
|
# Supprimer les lignes vides multiples
|
|
text_content = re.sub(r'\n\s*\n', '\n\n', text_content)
|
|
|
|
# Nettoyer au début et à la fin
|
|
text_content = text_content.strip()
|
|
|
|
return text_content
|
|
|
|
def format_date(date_str):
|
|
"""
|
|
Formate une date ISO en format lisible.
|
|
"""
|
|
if not date_str:
|
|
return ""
|
|
|
|
try:
|
|
# Extraire la partie date et heure (ignorer la timezone si présente)
|
|
match = re.match(r'(\d{4}-\d{2}-\d{2})[T ](\d{2}:\d{2}:\d{2})', date_str)
|
|
if match:
|
|
date_part, time_part = match.groups()
|
|
return f"{date_part} {time_part}"
|
|
return date_str
|
|
except Exception:
|
|
return date_str
|
|
|
|
if __name__ == "__main__":
|
|
# Test simple
|
|
html = """<p>Bonjour,</p>
|
|
<p>Voici un message avec <b>du HTML</b> et une signature.</p>
|
|
<p>Cordialement,</p>
|
|
<p>John Doe</p>
|
|
<p>Support technique</p>
|
|
<p>Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale,
|
|
nous vous invitons à envoyer vos demandes d'assistance technique à support@exemple.fr</p>
|
|
<p></p>
|
|
"""
|
|
|
|
cleaned = clean_html(html)
|
|
print("HTML nettoyé :\n", cleaned)
|
|
|
|
text = """Bonjour,
|
|
|
|
Voici un message avec une signature.
|
|
|
|
Cordialement,
|
|
John
|
|
|
|
-------- Message d'origine --------
|
|
De : Alice <alice@exemple.fr>
|
|
Envoyé : lundi 18 mars 2025 14:52
|
|
À : John <john@exemple.fr>
|
|
Objet : Test
|
|
|
|
Bonjour John,
|
|
Comment vas-tu ?
|
|
"""
|
|
|
|
cleaned_text = clean_text(text)
|
|
print("\nTexte nettoyé :\n", cleaned_text) |