File size: 2,403 Bytes
33d0a0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ad32346
33d0a0c
 
 
 
 
 
 
 
 
 
 
 
5ae3f82
dd0583a
33d0a0c
ad32346
 
5ae3f82
ad32346
dd0583a
 
 
 
5ae3f82
b9e623a
33d0a0c
 
 
 
642290f
 
33d0a0c
6aa9a9a
 
33d0a0c
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os
from glob import glob
from sentence_transformers import SentenceTransformer
import gradio as gr
import numpy as np
import faiss

# Cargar el modelo de Sentence Transformers
model_name = "quora-distilbert-multilingual"
model = SentenceTransformer(model_name)

# Funci贸n para vectorizar un texto
def vectorize_text(text):
    return model.encode([text])[0]

# Obtener una lista de todos los archivos *.index en el directorio
archivos_indices = glob("*.index")

# Cargar todos los 铆ndices de Faiss
indices = []
nombres_archivos = []  # Lista para almacenar los nombres de los archivos

for archivo_index in archivos_indices:
    index = faiss.read_index(archivo_index)
    indices.append(index)
    nombres_archivos.append(os.path.splitext(archivo_index)[0])  # Obtener el nombre sin la extensi贸n

# Funci贸n para predecir la similitud con cada 铆ndice
def predecir_similitud(texto):
    resultados = []
    umbral_similitud = 0.65

    # Vectorizar el texto (usando la misma funci贸n que antes)
    texto_vectorizado = vectorize_text(texto)

    for i, (index, nombre_archivo) in enumerate(zip(indices, nombres_archivos)):
        # Buscar similitud con Faiss
        texto_vectorizado_np = np.array([texto_vectorizado], dtype=np.float32)
        D, I = index.search(texto_vectorizado_np, 1)  # Buscar el vector m谩s cercano
        similitud = 1 - D[0][0]  # Calcular similitud de coseno

        # Comparar con el umbral y proporcionar el resultado
        if similitud >= umbral_similitud:
            resultado = (nombre_archivo, similitud)
            resultados.append(resultado)

    # Ordenar la lista de resultados por similitud
    resultados_ordenados = sorted(resultados, key=lambda x: x[1], reverse=True)

    # Construir la cadena de resultados
    if resultados_ordenados:
        resultados_texto = '\n'.join([f"{nombre} (similitud:{sim:.2f})" for nombre, sim in resultados_ordenados])
    else:
        resultados_texto = "No se han encontrado resultados"

    return resultados_texto

# Crear la interfaz de Gradio con un bot贸n de "Predecir"
iface = gr.Interface(
    fn=predecir_similitud,
    inputs=gr.inputs.Textbox(default=""),
    outputs=gr.outputs.Textbox(label="Argumentos"),  # Usar multiple=True
    live=False,
    title="Argumentos",
    description="Ingrese un texto y haga clic en 'Submit' para detectar Argumentos."
)

# Ejecutar la interfaz
iface.launch()