import streamlit as st import PyPDF2 import json import os # Les fonctions de conversion PDF -> Texte -> JSON def extract_text_from_pdf(pdf_path): text = [] with open(pdf_path, 'rb') as file: pdf_reader = PyPDF2.PdfReader(file) for i, page in enumerate(pdf_reader.pages): text.append({"page": i + 1, "text": page.extract_text()}) return text def save_text_to_json(data, output_file): with open(output_file, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=4) def display_json_contents(file_path): try: with open(file_path, 'r', encoding='utf-8') as f: data = json.load(f) st.write(data) except FileNotFoundError: st.error(f"Le fichier {file_path} n'a pas été trouvé.") # Interface avec onglets tab1, tab2 = st.tabs(["Extracteur PDF", "Questions Chatbot"]) # Onglet 1 - Extracteur PDF with tab1: st.header("Extracteur PDF") pdf_path = 'data/07-VF2_UDM_Oneframe_A4-2023.pdf' json_output_path = 'data/extracted_text.json' if not os.path.exists(json_output_path): if st.button('Extraire le texte du PDF et sauvegarder en JSON'): pdf_text = extract_text_from_pdf(pdf_path) save_text_to_json(pdf_text, json_output_path) st.success("Le texte a été extrait et sauvegardé.") else: st.success(f"Le fichier {json_output_path} existe déjà. Aucune extraction nécessaire.") try: with open(json_output_path, 'r', encoding='utf-8') as f: st.download_button( label="Télécharger le JSON", data=f, file_name="extracted_text.json", mime="application/json" ) except FileNotFoundError: st.error(f"Le fichier {json_output_path} n'est pas disponible pour téléchargement.") # Onglet 2 - Questions Chatbot with tab2: st.header("Questions Chatbot") questions_details = { "Quel est l'impact de l'emailing ?": ("L'emailing a un impact significatif dû à la consommation énergétique des serveurs.", "Envoyer un email avec une pièce jointe de 1MB émet environ 20g de CO2.", "Chapitre 5: Impact de l'emailing", "Page 12"), "Comment optimiser une campagne numérique ?": ("Optimiser une campagne numérique implique de réduire son empreinte carbone.", "Utiliser des formats d'image optimisés pour réduire la taille des données transmises.", "Chapitre 6: Optimisation des campagnes numériques", "Page 18"), } col1, col2 = st.columns(2) with col1: if st.button("Impact de l'emailing"): selected_question = "Quel est l'impact de l'emailing ?" principe, exemple, chapitre, page = questions_details[selected_question] st.write(f"**Principe clé :** {principe}") st.write(f"**Exemple :** {exemple}") st.write(f"**{chapitre}**, Page {page}") with col2: if st.button("Optimiser campagne numérique"): selected_question = "Comment optimiser une campagne numérique ?" principe, exemple, chapitre, page = questions_details[selected_question] st.write(f"**Principe clé :** {principe}") st.write(f"**Exemple :** {exemple}") st.write(f"**{chapitre}**, {page}") # Zone de texte pour poser une question libre st.subheader("Poser votre question") user_question = st.text_input("", on_change=None, key="user_question") if user_question: # Exemple fictif de traitement de la question de l'utilisateur # Intégrez ici votre propre logique pour fournir des réponses basées sur la question saisie principe = "Réponse principe à la question posée" exemple = "Exemple associé à la réponse de votre question" chapitre = "Chapitre X: Titre du Chapitre" page = "Page Y" st.write(f"**Principe clé :** {principe}") st.write(f"**Exemple :** {exemple}") st.write(f"**{chapitre}**, {page}")