# README.md ## Description Ce programme permet de lire un fichier texte, de le découper en morceaux (chunks), de vectoriser ces morceaux à l'aide de SentenceTransformer, de stocker les vecteurs dans une base de données FAISS, et enfin d'interroger cette base de données pour trouver les morceaux les plus similaires à une question donnée. ## Prérequis Avant d'exécuter ce programme, assurez-vous d'avoir installé les bibliothèques suivantes : - `faiss` - `numpy` - `sentence-transformers` Vous pouvez les installer via pip : ```bash pip install faiss-cpu numpy sentence-transformers ``` ## Utilisation ### Étape 1 : Lire le fichier texte La fonction `lire_fichier` lit le contenu d'un fichier texte donné. ```python def lire_fichier(fichier): with open(fichier, 'r', encoding='utf-8') as file: return file.read() ``` ### Étape 2 : Découper le texte en chunks La fonction `decouper_texte` découpe le texte en morceaux de taille définie (par défaut 100 mots). ```python 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 La fonction `vectoriser_chunks` utilise le modèle `SentenceTransformer` pour vectoriser les morceaux de texte. ```python model = SentenceTransformer('paraphrase-MiniLM-L6-v2') def vectoriser_chunks(chunks): vecteurs = model.encode(chunks) return vecteurs ``` ### Étape 4 : Stocker les vecteurs dans FAISS La fonction `creer_index_faiss` crée un index FAISS et y ajoute les vecteurs. ```python 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 La fonction `interroger_base` permet de rechercher les morceaux les plus similaires à une question donnée. ```python 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 Voici un exemple d'utilisation du programme : ```python 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 à la 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 à la question 2 :") for chunk in chunks_similaires: print(chunk) ``` ## Remarques - Assurez-vous que le fichier `hello-world.txt` existe dans le même répertoire que le script. - Vous pouvez ajuster la taille des chunks en modifiant le paramètre `taille_chunk` dans la fonction `decouper_texte`. - Le modèle `SentenceTransformer` utilisé est `paraphrase-MiniLM-L6-v2`, mais vous pouvez en utiliser un autre si nécessaire. ## Licence Ce projet est sous licence MIT. Voir le fichier `LICENSE` pour plus de détails.