Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
1 result

grille.cpp

Blame
  • 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_())