cv-chatbot / cv_processor.py
Sidoineko's picture
Create cv_processor.py
ba75cc7 verified
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)