arconsultora / app.py
pgtoopx's picture
feat: promt init chatgpt
f340651
import gradio as gr
import fitz # PyMuPDF para procesar PDFs
# Variable global para almacenar el contenido del archivo PDF cargado en memoria
contenido_pdf = None
# Función para cargar el archivo PDF y extraer su contenido como texto
def cargar_archivo_pdf(documento):
global contenido_pdf
try:
# Abre el archivo PDF desde la ruta y extrae todo el texto
doc = fitz.open(documento) # 'documento' es la ruta del archivo
contenido_pdf = ""
for pagina in doc:
contenido_pdf += pagina.get_text()
if contenido_pdf.strip() == "":
return "No se pudo extraer texto del archivo PDF. Asegúrate de que no esté escaneado."
return "Archivo PDF cargado con éxito. Ahora puedes hacer preguntas sobre el documento."
except Exception as e:
return f"Error al procesar el archivo: {e}"
# Función para procesar las preguntas sobre el archivo PDF cargado
def procesar_pregunta(pregunta):
global contenido_pdf
if contenido_pdf is None:
return "Por favor, carga un archivo PDF antes de hacer preguntas."
# Simulación de procesamiento de la pregunta (aquí puedes mejorar el análisis)
if "total" in pregunta.lower():
# Simulación de un análisis de la pregunta
return f"Respuesta simulada: El archivo menciona la palabra 'total' en el texto."
elif "resumen" in pregunta.lower():
# Devolver los primeros 500 caracteres del archivo como un resumen
return f"Resumen del archivo:\n{contenido_pdf[:500]}..."
else:
return "Lo siento, no puedo responder a esa pregunta. Prueba con algo como '¿Cuál es el total?' o 'Dame un resumen del archivo'."
# Definir la interfaz gráfica con Gradio
def crear_interface():
with gr.Blocks() as demo:
gr.Markdown("# Asistente Contable para Archivos PDF")
# Sección de carga de archivo PDF
archivo_input = gr.File(label="Cargar documento PDF", type="filepath") # Cambiado a 'filepath'
archivo_output = gr.Textbox(label="Estado del archivo")
# Sección de preguntas y respuestas
pregunta_input = gr.Textbox(label="Haz tu pregunta", placeholder="Ej: ¿Cuál es el total mencionado en el documento?")
respuesta_output = gr.Textbox(label="Respuesta")
# Historial de preguntas y respuestas
historial = gr.Textbox(label="Historial", interactive=False)
# Función que actualiza el historial
def actualizar_historial(pregunta, respuesta, historial_actual):
return historial_actual + f"Pregunta: {pregunta}\nRespuesta: {respuesta}\n\n"
# Conectar los inputs/outputs con las funciones
archivo_input.change(cargar_archivo_pdf, archivo_input, archivo_output)
pregunta_input.submit(
fn=lambda pregunta: (respuesta := procesar_pregunta(pregunta), respuesta),
inputs=pregunta_input,
outputs=[respuesta_output, respuesta_output]
)
pregunta_input.submit(
actualizar_historial, [pregunta_input, respuesta_output, historial], historial
)
return demo
# Iniciar la interfaz
if __name__ == "__main__":
interfaz = crear_interface()
interfaz.launch()