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