File size: 2,045 Bytes
ba75cc7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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)