Spaces:
Sleeping
Sleeping
Arreglos en la documentacion
Browse files
app.py
CHANGED
@@ -3,6 +3,13 @@ from transformers import pipeline
|
|
3 |
from sentence_transformers import SentenceTransformer
|
4 |
import faiss
|
5 |
import numpy as np
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
# --- Base documental: información sobre la biblioteca ---
|
8 |
documentos = [
|
@@ -30,6 +37,9 @@ documentos = [
|
|
30 |
"¿Que categorías de libros hay? La biblioteca cuenta con libros de texto, literatura, investigación, tecnología, humanidades, y más."
|
31 |
]
|
32 |
|
|
|
|
|
|
|
33 |
# --- Preguntas frecuentes personalizadas ---
|
34 |
# --- Son preguntas que se hacen sin signos de pregunta o con signos incompletos ---
|
35 |
faq_personalizadas = {
|
@@ -42,9 +52,12 @@ faq_personalizadas = {
|
|
42 |
"que categoria de libros hay?": "Hay libros de ciencia, literatura, ingeniería, arte, historia, tecnología y muchos más."
|
43 |
}
|
44 |
|
|
|
|
|
|
|
45 |
# --- Cargar modelo de embeddings y crear índice FAISS ---
|
46 |
modelo_emb = SentenceTransformer('sentence-transformers/bert-base-nli-mean-tokens')
|
47 |
-
embeddings_docs = modelo_emb.encode(
|
48 |
|
49 |
dim = embeddings_docs.shape[1]
|
50 |
index = faiss.IndexFlatL2(dim)
|
@@ -55,7 +68,7 @@ qa_pipeline = pipeline("question-answering", model="PlanTL-GOB-ES/roberta-base-b
|
|
55 |
|
56 |
# --- Detectar saludos y frases comunes ---
|
57 |
def respuesta_basica(texto):
|
58 |
-
texto = texto
|
59 |
saludos = ["hola", "buenos días", "buenas tardes", "buenas noches", "qué tal", "hey", "buen día"]
|
60 |
despedidas = ["adiós", "hasta luego", "nos vemos"]
|
61 |
agradecimientos = ["gracias", "muchas gracias", "te lo agradezco"]
|
@@ -71,20 +84,20 @@ def respuesta_basica(texto):
|
|
71 |
|
72 |
# --- Función de chatbot con manejo de frases comunes ---
|
73 |
def chat_biblioteca(mensaje, historial=None):
|
74 |
-
|
75 |
-
|
76 |
respuesta_simple = respuesta_basica(mensaje)
|
77 |
if respuesta_simple:
|
78 |
return respuesta_simple
|
79 |
|
80 |
-
for clave in
|
81 |
-
if clave in
|
82 |
-
return
|
83 |
|
84 |
# Respuesta con embeddings y QA
|
85 |
-
embedding = modelo_emb.encode([
|
86 |
-
D, I = index.search(embedding, k=
|
87 |
-
contexto = " ".join([
|
88 |
|
89 |
try:
|
90 |
resultado = qa_pipeline(question=mensaje, context=contexto)
|
|
|
3 |
from sentence_transformers import SentenceTransformer
|
4 |
import faiss
|
5 |
import numpy as np
|
6 |
+
import unicodedata
|
7 |
+
|
8 |
+
# --- Normalización de texto (quita tildes y pasa a minúsculas) ---
|
9 |
+
def normalizar(texto):
|
10 |
+
texto = texto.lower().strip()
|
11 |
+
texto = unicodedata.normalize("NFD", texto).encode("ascii", "ignore").decode("utf-8")
|
12 |
+
return texto
|
13 |
|
14 |
# --- Base documental: información sobre la biblioteca ---
|
15 |
documentos = [
|
|
|
37 |
"¿Que categorías de libros hay? La biblioteca cuenta con libros de texto, literatura, investigación, tecnología, humanidades, y más."
|
38 |
]
|
39 |
|
40 |
+
# Normalizar documentos
|
41 |
+
documentos_normalizados = [normalizar(doc) for doc in documentos]
|
42 |
+
|
43 |
# --- Preguntas frecuentes personalizadas ---
|
44 |
# --- Son preguntas que se hacen sin signos de pregunta o con signos incompletos ---
|
45 |
faq_personalizadas = {
|
|
|
52 |
"que categoria de libros hay?": "Hay libros de ciencia, literatura, ingeniería, arte, historia, tecnología y muchos más."
|
53 |
}
|
54 |
|
55 |
+
# Normalizar claves de faq_personalizadas
|
56 |
+
faq_personalizadas_normalizadas = {normalizar(k): v for k, v in faq_personalizadas.items()}
|
57 |
+
|
58 |
# --- Cargar modelo de embeddings y crear índice FAISS ---
|
59 |
modelo_emb = SentenceTransformer('sentence-transformers/bert-base-nli-mean-tokens')
|
60 |
+
embeddings_docs = modelo_emb.encode(documentos_normalizados, convert_to_numpy=True)
|
61 |
|
62 |
dim = embeddings_docs.shape[1]
|
63 |
index = faiss.IndexFlatL2(dim)
|
|
|
68 |
|
69 |
# --- Detectar saludos y frases comunes ---
|
70 |
def respuesta_basica(texto):
|
71 |
+
texto = normalizar(texto)
|
72 |
saludos = ["hola", "buenos días", "buenas tardes", "buenas noches", "qué tal", "hey", "buen día"]
|
73 |
despedidas = ["adiós", "hasta luego", "nos vemos"]
|
74 |
agradecimientos = ["gracias", "muchas gracias", "te lo agradezco"]
|
|
|
84 |
|
85 |
# --- Función de chatbot con manejo de frases comunes ---
|
86 |
def chat_biblioteca(mensaje, historial=None):
|
87 |
+
mensaje_normal = normalizar(mensaje)
|
88 |
+
|
89 |
respuesta_simple = respuesta_basica(mensaje)
|
90 |
if respuesta_simple:
|
91 |
return respuesta_simple
|
92 |
|
93 |
+
for clave in faq_personalizadas_normalizadas:
|
94 |
+
if clave in mensaje_normal:
|
95 |
+
return faq_personalizadas_normalizadas[clave]
|
96 |
|
97 |
# Respuesta con embeddings y QA
|
98 |
+
embedding = modelo_emb.encode([mensaje_normal], convert_to_numpy=True)
|
99 |
+
D, I = index.search(embedding, k=5)
|
100 |
+
contexto = " ".join([documentos_normalizados[i] for i in I[0]])
|
101 |
|
102 |
try:
|
103 |
resultado = qa_pipeline(question=mensaje, context=contexto)
|