LaurentTRIPIED's picture
Update app.py
f0c61ac verified
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}")