Spaces:
Running
Running
<html lang="es"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Modelo de Preguntas y Respuestas sobre un PDF</title> | |
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.min.js"></script> | |
<script> | |
// Aseguramos que pdf.js esté cargado antes de configurarlo | |
window.onload = function() { | |
pdfjsLib.GlobalWorkerOptions.workerSrc = "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.worker.min.js"; | |
} | |
</script> | |
</head> | |
<body> | |
<h1>Modelo de Preguntas y Respuestas sobre un PDF</h1> | |
<input type="file" id="pdfInput" /> | |
<button onclick="procesarPDF()">Cargar PDF</button> | |
<h2>Preguntar sobre el PDF</h2> | |
<input type="text" id="inputPregunta" placeholder="Escribe tu pregunta aquí"> | |
<button onclick="responderPregunta()">Hacer pregunta</button> | |
<h3>Respuesta:</h3> | |
<div id="respuesta"></div> | |
<script> | |
// Variable global para almacenar el texto del PDF | |
let textoPDF = ""; | |
// Cargar y procesar el archivo PDF | |
async function procesarPDF() { | |
const archivo = document.getElementById("pdfInput").files[0]; | |
if (archivo) { | |
const archivoPDF = await leerPDF(archivo); | |
textoPDF = archivoPDF.join(" "); | |
alert("PDF cargado y procesado."); | |
} | |
} | |
// Leer y extraer el texto del archivo PDF | |
async function leerPDF(archivo) { | |
const lector = new FileReader(); | |
return new Promise((resolve, reject) => { | |
lector.onload = async function (e) { | |
const arrayBuffer = e.target.result; | |
const pdf = await pdfjsLib.getDocument(arrayBuffer).promise; | |
let texto = []; | |
for (let i = 1; i <= pdf.numPages; i++) { | |
const pagina = await pdf.getPage(i); | |
const contenido = await pagina.getTextContent(); | |
const textoPagina = contenido.items.map(item => item.str).join(" "); | |
texto.push(textoPagina); | |
} | |
resolve(texto); | |
}; | |
lector.onerror = reject; | |
lector.readAsArrayBuffer(archivo); | |
}); | |
} | |
// Función para responder una pregunta utilizando el texto del PDF | |
function responderPregunta() { | |
const pregunta = document.getElementById("inputPregunta").value; | |
if (!textoPDF) { | |
alert("Por favor, cargue un PDF primero."); | |
return; | |
} | |
// Tokenizar la pregunta en palabras clave | |
const palabrasClave = pregunta.toLowerCase().split(" "); | |
// Buscar frases que contengan las palabras clave | |
const frases = textoPDF.split("."); | |
const frasesRelevantes = frases.filter(frase => { | |
return palabrasClave.some(palabra => frase.toLowerCase().includes(palabra)); | |
}); | |
if (frasesRelevantes.length > 0) { | |
// Devolver la primera frase relevante | |
document.getElementById("respuesta").innerText = "Respuesta: " + frasesRelevantes[0]; | |
} else { | |
document.getElementById("respuesta").innerText = "No se encontraron respuestas relevantes."; | |
} | |
} | |
</script> | |
</body> | |
</html> | |