ancerlop commited on
Commit
33d0a0c
1 Parent(s): 8597c28

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -0
app.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from glob import glob
3
+ from sentence_transformers import SentenceTransformer
4
+ import gradio as gr
5
+ import numpy as np
6
+ import faiss
7
+
8
+ # Cargar el modelo de Sentence Transformers
9
+ model_name = "quora-distilbert-multilingual"
10
+ model = SentenceTransformer(model_name)
11
+
12
+ # Funci贸n para vectorizar un texto
13
+ def vectorize_text(text):
14
+ return model.encode([text])[0]
15
+
16
+ # Obtener una lista de todos los archivos *.index en el directorio
17
+ archivos_indices = glob("*.index")
18
+
19
+ # Cargar todos los 铆ndices de Faiss
20
+ indices = []
21
+ nombres_archivos = [] # Lista para almacenar los nombres de los archivos
22
+
23
+ for archivo_index in archivos_indices:
24
+ index = faiss.read_index(archivo_index)
25
+ indices.append(index)
26
+ nombres_archivos.append(os.path.splitext(archivo_index)[0]) # Obtener el nombre sin la extensi贸n
27
+
28
+ # Funci贸n para predecir la similitud con cada 铆ndice
29
+ def predecir_similitud(texto):
30
+ resultados = []
31
+ umbral_similitud = -11
32
+
33
+ # Vectorizar el texto (usando la misma funci贸n que antes)
34
+ texto_vectorizado = vectorize_text(texto)
35
+
36
+ for i, (index, nombre_archivo) in enumerate(zip(indices, nombres_archivos)):
37
+ # Buscar similitud con Faiss
38
+ texto_vectorizado_np = np.array([texto_vectorizado], dtype=np.float32)
39
+ D, I = index.search(texto_vectorizado_np, 1) # Buscar el vector m谩s cercano
40
+ similitud = 1 - D[0][0] # Calcular similitud de coseno
41
+
42
+ # Comparar con el umbral y proporcionar el resultado
43
+ if similitud >= umbral_similitud:
44
+ resultado = f"Coincidencia con archivo {nombre_archivo} (similitud: {similitud:.2f})"
45
+ else:
46
+ resultado = f"No se detect贸 coincidencia con archivo {nombre_archivo} (similitud: {similitud:.2f})"
47
+
48
+ resultados.append(resultado)
49
+
50
+ return resultados
51
+
52
+ # Crear la interfaz de Gradio con un bot贸n de "Predecir"
53
+ iface = gr.Interface(
54
+ fn=predecir_similitud,
55
+ inputs=gr.inputs.Textbox(default="Ingrese su texto aqu铆"),
56
+ outputs=gr.outputs.Textbox(),
57
+ live=False,
58
+ title="Detector de Coincidencias",
59
+ description="Ingrese un texto y haga clic en 'Predecir' para detectar coincidencias con los vectores."
60
+ )
61
+
62
+ # Ejecutar la interfaz
63
+ iface.launch()