Spaces:
Sleeping
Sleeping
File size: 2,775 Bytes
62cdc78 |
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 71 72 73 74 75 76 77 78 79 80 81 82 83 |
import os
import pandas as pd
import numpy as np
from supabase import create_client
from sentence_transformers import SentenceTransformer
import faiss
import gradio as gr
# Configura Supabase
SUPABASE_URL = os.getenv("SUPABASE_URL")
SUPABASE_KEY = os.getenv("SUPABASE_KEY")
EMBEDDING_MODEL = "all-MiniLM-L6-v2"
# Crea client per Supabase
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
# Carica il modello per gli embedding
model = SentenceTransformer(EMBEDDING_MODEL)
# Funzione per caricare i dati da Supabase
def load_database(supabase_client):
# Recupera gli articoli da Supabase (assumiamo che la tabella si chiami 'papers')
response = supabase_client.table("papers").select("*").execute()
data = response.data
# Converti i dati in un DataFrame
df = pd.DataFrame(data)
return df
# Funzione per creare l'indice FAISS
def create_faiss_index(embeddings):
dimension = len(embeddings[0]) # La dimensione degli embedding
index = faiss.IndexFlatL2(dimension) # Crea un indice per la ricerca basato sulla distanza L2
index.add(np.array(embeddings, dtype=np.float32)) # Aggiungi gli embedding all'indice
return index
# Funzione per eseguire la ricerca
def search_papers(query, supabase_client):
# Carica i dati e l'indice FAISS
df = load_database(supabase_client)
index = create_faiss_index(df["embedding"].tolist())
# Calcola l'embedding della query
query_embedding = model.encode(query).reshape(1, -1).astype(np.float32)
distances, indices = index.search(query_embedding, 3) # Cerca i top 2 articoli più simili
results = df.iloc[indices[0]] # Recupera i risultati corrispondenti
return [(res["title"], res["url"]) for _, res in results.iterrows()]
# Funzione per generare l'interfaccia Gradio
def gradio_interface(query):
results = search_papers(query, supabase)
html_output = "<ul style='list-style-type: none; padding-left: 0;'>"
for title, url in results:
html_output += f"""
<li style="margin-bottom: 15px;">
<a href='{url}' target='_blank' style='text-decoration: none; color: #007bff; font-size: 18px; font-weight: bold;'>
{title}
</a>
</li>
"""
html_output += "</ul>"
return html_output
# Interfaccia Gradio
iface = gr.Interface(
fn=gradio_interface,
inputs=gr.Textbox(label="Inserisci la tua query di ricerca", placeholder="Es. 'Deep Learning for NLP'", lines=1),
outputs=gr.HTML(label="Articoli correlati", elem_id="output-section"),
live=True,
title="Ricerca articoli arXiv",
description="Inserisci una query per trovare articoli correlati.",
)
# Avvia l'interfaccia
if __name__ == "__main__":
iface.launch() |