import PyPDF2 from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import TextLoader from langchain.vectorstores import FAISS from langchain.embeddings import HuggingFaceEmbeddings import os def process_cv(cv_path): # Extraire le texte du PDF text = "" with open(cv_path, 'rb') as file: pdf_reader = PyPDF2.PdfReader(file) for page in pdf_reader.pages: text += page.extract_text() # Diviser le texte en chunks text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200 ) chunks = text_splitter.split_text(text) # Créer les embeddings embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") # Créer la base de données vectorielle db = FAISS.from_texts(chunks, embeddings) return db def query_cv(db, question): # Rechercher dans la base de données docs = db.similarity_search(question, k=3) # Extraire le texte des documents les plus pertinents context = "\n".join([doc.page_content for doc in docs]) return context if __name__ == "__main__": # Chemin absolu vers le CV cv_path = r"D:\Developpement_informatique\vsc\Portfolio\portfolio\Sidoine_Kolaole_Yebadokpo_CV.pdf" # Créer ou charger la base de données db_path = "cv_database" if not os.path.exists(db_path): print("Création de la base de données...") db = process_cv(cv_path) db.save_local(db_path) else: print("Chargement de la base de données existante...") db = FAISS.load_local(db_path, embeddings=HuggingFaceEmbeddings()) # Boucle pour poser des questions while True: question = input("\nPosez une question sur votre CV (ou tapez 'quit' pour quitter) : ") if question.lower() == 'quit': break result = query_cv(db, question) print("\nRéponse trouvée dans votre CV:") print(result)