FelipeMena commited on
Commit
94817a4
·
verified ·
1 Parent(s): 2600dd7

Arreglos en la documentacion

Browse files
Files changed (1) hide show
  1. app.py +23 -10
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(documentos, convert_to_numpy=True)
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.lower().strip()
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
- mensaje_limpio = mensaje.lower().strip()
75
-
76
  respuesta_simple = respuesta_basica(mensaje)
77
  if respuesta_simple:
78
  return respuesta_simple
79
 
80
- for clave in faq_personalizadas:
81
- if clave in mensaje_limpio:
82
- return faq_personalizadas[clave]
83
 
84
  # Respuesta con embeddings y QA
85
- embedding = modelo_emb.encode([mensaje], convert_to_numpy=True)
86
- D, I = index.search(embedding, k=2)
87
- contexto = " ".join([documentos[i] for i in I[0]])
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)