www / test4.html
eduardmtz's picture
Create test4.html
3d7962f verified
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Preguntas y Respuestas desde PDFs</title>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/qna"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.min.js"></script>
<script>
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 a partir de PDFs</h1>
<!-- Carga de PDFs -->
<h2>Cargar PDFs</h2>
<input type="file" id="pdfInput" multiple accept=".pdf" />
<button onclick="cargarPDFs()">Cargar PDFs</button>
<div id="statusCarga"></div>
<!-- Preguntas -->
<h2>Realizar una pregunta</h2>
<input type="text" id="preguntaInput" placeholder="Escribe tu pregunta aqu铆" />
<button onclick="realizarPregunta()">Preguntar</button>
<div>
<h3>Respuesta:</h3>
<p id="respuesta"></p>
</div>
<script>
// Variable global para almacenar el texto extra铆do de los PDFs
let contextoGlobal = "";
// Carga y procesamiento de PDFs
async function cargarPDFs() {
const archivos = document.getElementById("pdfInput").files;
if (archivos.length === 0) {
alert("Por favor, selecciona uno o m谩s archivos PDF.");
return;
}
const textos = [];
for (const archivo of archivos) {
const texto = await extraerTextoPDF(archivo);
textos.push(texto);
}
// Unir todo el texto en un contexto global
contextoGlobal = textos.join(" ");
document.getElementById("statusCarga").innerText = "PDFs cargados y procesados correctamente.";
}
// Funci贸n para extraer texto de un archivo PDF
async function extraerTextoPDF(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 textoCompleto = "";
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(" ");
textoCompleto += textoPagina + "\n";
}
resolve(textoCompleto);
};
lector.onerror = reject;
lector.readAsArrayBuffer(archivo);
});
}
// Modelo de Preguntas y Respuestas usando TensorFlow.js
let modelo = null;
// Funci贸n para realizar una pregunta
async function realizarPregunta() {
const pregunta = document.getElementById("preguntaInput").value;
if (!contextoGlobal) {
alert("Primero debes cargar los PDFs para generar el contexto.");
return;
}
if (!pregunta) {
alert("Por favor, escribe una pregunta.");
return;
}
if (!modelo) {
document.getElementById("respuesta").innerText = "Cargando modelo, por favor espera...";
modelo = await qna.load(); // Cargar el modelo QnA basado en DistilBERT
}
// Realizar la pregunta
const respuestas = await modelo.findAnswers(pregunta, contextoGlobal);
// Mostrar la mejor respuesta o un mensaje si no se encontr贸 ninguna
if (respuestas.length > 0) {
document.getElementById("respuesta").innerText = respuestas[0].text;
} else {
document.getElementById("respuesta").innerText = "No se encontr贸 una respuesta adecuada.";
}
}
</script>
</body>
</html>