mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-13 10:46:51 +01:00
107 lines
4.2 KiB
Python
107 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import json
|
|
import csv
|
|
import os
|
|
import sys
|
|
|
|
def generate_csv_from_json(json_file, model_name=None):
|
|
"""
|
|
Génère un fichier CSV à partir des données du tableau questions/réponses
|
|
contenues dans le fichier JSON du rapport.
|
|
|
|
Args:
|
|
json_file (str): Chemin du fichier JSON contenant les données
|
|
model_name (str, optional): Nom du modèle à inclure dans le nom du fichier
|
|
|
|
Returns:
|
|
str: Chemin du fichier CSV généré
|
|
"""
|
|
# Extraire l'ID du ticket du nom du fichier
|
|
ticket_id = os.path.basename(json_file).split('_')[0]
|
|
|
|
# Créer le répertoire CSV à la racine du projet
|
|
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
|
|
csv_root_dir = os.path.join(project_root, 'CSV')
|
|
ticket_csv_dir = os.path.join(csv_root_dir, ticket_id)
|
|
|
|
# Créer les répertoires si nécessaire
|
|
os.makedirs(ticket_csv_dir, exist_ok=True)
|
|
|
|
# Définir le nom du fichier CSV de sortie
|
|
if model_name:
|
|
csv_file = os.path.join(ticket_csv_dir, f"{ticket_id}_{model_name}.csv")
|
|
else:
|
|
# Si le modèle n'est pas spécifié, utiliser les métadonnées du JSON
|
|
with open(json_file, 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
model_name = data.get('metadata', {}).get('model', 'unknown')
|
|
csv_file = os.path.join(ticket_csv_dir, f"{ticket_id}_{model_name}.csv")
|
|
|
|
# Ouvrir le fichier JSON
|
|
with open(json_file, 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
|
|
# Extraire les échanges
|
|
exchanges = data.get('chronologie_echanges', [])
|
|
|
|
if not exchanges:
|
|
print(f"Aucun échange trouvé dans {json_file}")
|
|
return None
|
|
|
|
# Ouvrir le fichier CSV pour écriture
|
|
with open(csv_file, 'w', newline='', encoding='utf-8') as f:
|
|
writer = csv.writer(f)
|
|
|
|
# Écrire l'en-tête
|
|
writer.writerow(['Question', 'Réponse'])
|
|
|
|
current_question = None
|
|
current_answers = []
|
|
|
|
# Parcourir les échanges pour les combiner en paires questions/réponses
|
|
for exchange in exchanges:
|
|
emetteur = exchange.get('emetteur', '').upper()
|
|
type_msg = exchange.get('type', '').lower()
|
|
contenu = exchange.get('contenu', '')
|
|
|
|
# Si c'est une question client
|
|
if emetteur == 'CLIENT' and (type_msg == 'question' or '?' in contenu):
|
|
# Si une question précédente existe, l'écrire avec ses réponses
|
|
if current_question:
|
|
combined_answer = "\n".join(current_answers) if current_answers else "Pas de réponse"
|
|
writer.writerow([current_question, combined_answer])
|
|
|
|
# Réinitialiser pour la nouvelle question
|
|
current_question = contenu
|
|
current_answers = []
|
|
|
|
# Si c'est une réponse ou un complément du support
|
|
elif emetteur == 'SUPPORT' and (type_msg == 'réponse' or type_msg == 'complément visuel' or type_msg == 'information technique'):
|
|
if current_question: # S'assurer qu'il y a une question en cours
|
|
# Ajouter le contenu sans préfixe
|
|
current_answers.append(contenu)
|
|
|
|
# Écrire la dernière question et ses réponses
|
|
if current_question:
|
|
combined_answer = "\n".join(current_answers) if current_answers else "Pas de réponse"
|
|
writer.writerow([current_question, combined_answer])
|
|
|
|
print(f"Fichier CSV créé: {csv_file}")
|
|
return csv_file
|
|
|
|
if __name__ == "__main__":
|
|
# Vérifier si un chemin de fichier est fourni en argument
|
|
if len(sys.argv) > 1:
|
|
json_file = sys.argv[1]
|
|
else:
|
|
print("Erreur: Veuillez spécifier le chemin du fichier JSON.")
|
|
print("Usage: python csv_exporter.py chemin/vers/rapport_final.json [nom_modele]")
|
|
sys.exit(1)
|
|
|
|
# Vérifier si un nom de modèle est fourni en second argument
|
|
model_name = sys.argv[2] if len(sys.argv) > 2 else None
|
|
|
|
# Générer le CSV
|
|
generate_csv_from_json(json_file, model_name) |