import faiss
import numpy as np
from sentence_transformers import SentenceTransformer

# Étape 1 : Lire le fichier texte
def lire_fichier(fichier):
    with open(fichier, 'r', encoding='utf-8') as file:
        return file.read()

# Étape 2 : Découper le texte en chunks
def decouper_texte(texte, taille_chunk=100):
    mots = texte.split()
    chunks = [' '.join(mots[i:i + taille_chunk]) for i in range(0, len(mots), taille_chunk)]
    return chunks

# Étape 3 : Vectoriser les chunks avec SentenceTransformer
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')

def vectoriser_chunks(chunks):
    vecteurs = model.encode(chunks)
    return vecteurs

# Étape 4 : Stocker les vecteurs dans FAISS
def creer_index_faiss(vecteurs):
    dimension = vecteurs.shape[1]
    index = faiss.IndexFlatL2(dimension)
    index.add(vecteurs)
    return index

# Étape 5 : Interroger la base de données
def interroger_base(question, index, chunks, top_k=1):
    question_vector = model.encode([question])
    distances, indices = index.search(question_vector, top_k)
    return [chunks[i] for i in indices[0]]

# Exemple d'utilisation
texte = lire_fichier('hello-world.txt')
chunks = decouper_texte(texte)
vecteurs = vectoriser_chunks(chunks)
index_faiss = creer_index_faiss(vecteurs)

question = "Quelle est la signification de 'hello world'?"
chunks_similaires = interroger_base(question, index_faiss, chunks)

print("Chunks les plus similaires question 1 :")
for chunk in chunks_similaires:
    print(chunk)


question = "Comment afficher 'Hello, World!' en Python ?"
chunks_similaires = interroger_base(question, index_faiss, chunks)

print("Chunks les plus similaires question 2 :")
for chunk in chunks_similaires:
    print(chunk)

