Select Git revision
test_interface.py 3.53 KiB
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QLineEdit, QPushButton, QSizePolicy
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
def read_text_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read().split('\n\n')
content1 = [item for item in content if item != ""]
return content1
def create_vectorial_base(text_lines, min_chars=50):
filtered_lines = [line for line in text_lines if len(line) >= min_chars]
if not filtered_lines:
print("No lines with at least 50 characters found.")
return None, None, None
vectorizer = TfidfVectorizer()
vectorial_base = vectorizer.fit_transform(filtered_lines).toarray()
feature_names = vectorizer.get_feature_names_out()
return vectorizer, vectorial_base, feature_names
def get_best_answers(question, text_lines, vectorizer, vectorial_base):
question_vector = vectorizer.transform([question]).toarray()
# Calculate cosine similarity between the question and each text line
similarities = cosine_similarity(question_vector, vectorial_base).flatten()
# Get the indices of the top 5 most similar text lines
top_indices = np.argsort(similarities)[-5:][::-1]
# Retrieve the corresponding text lines
best_answers = [text_lines[i] for i in top_indices]
return best_answers
class ChatbotInterface(QWidget):
def __init__(self):
super().__init__()
file_path = 'reglementdescolarite-ingegeneraliste2324-1.docx.txt' # Replace with the path to your text file
self.text_lines = read_text_file(file_path)
if not self.text_lines:
print("The file is empty or doesn't exist.")
return
self.vectorizer, self.vectorial_base, _ = create_vectorial_base(self.text_lines)
self.init_ui()
def init_ui(self):
# Créer des widgets
self.conversation_text = QTextEdit(self)
self.conversation_text.setReadOnly(True)
self.user_input_entry = QLineEdit(self)
self.user_input_entry.setPlaceholderText("Saisissez votre message...")
self.send_button = QPushButton("Envoyer", self)
self.send_button.clicked.connect(self.send_message)
# Configurer la mise en page
layout = QVBoxLayout(self)
layout.addWidget(self.conversation_text)
layout.addWidget(self.user_input_entry)
layout.addWidget(self.send_button)
# Configurer la politique de taille pour permettre à la zone de conversation de s'étendre verticalement
size_policy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
self.conversation_text.setSizePolicy(size_policy)
# Définir la fenêtre principale
self.setWindowTitle('Chatbot Interface')
self.setGeometry(100, 100, 800, 600)
def send_message(self):
user_message = self.user_input_entry.text()
self.conversation_text.append(f"Utilisateur: {user_message}")
best_answers = get_best_answers(user_message, self.text_lines, self.vectorizer, self.vectorial_base)
chatbot_response=""
for i, answer in enumerate(best_answers, start=1):
chatbot_response+=(f"{i}. {answer.strip()}\n")
self.conversation_text.append(chatbot_response)
self.user_input_entry.clear()
if __name__ == '__main__':
app = QApplication(sys.argv)
chatbot_app = ChatbotInterface()
chatbot_app.show()
sys.exit(app.exec_())