Spaces:
Sleeping
Sleeping
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}") |