Skip to content
Snippets Groups Projects
Commit 7bbb2494 authored by Tiravy Amaury's avatar Tiravy Amaury
Browse files

fonctionne_ok

parent dce40662
No related branches found
No related tags found
1 merge request!6Test amau
......@@ -106,44 +106,17 @@ Modalités d’Application
1. Personnalisation du cursus ingénieur
1. Différentes variantes du cursus ingénieur
Pour les élèves admis sur concours ou sur titres, les différentes variantes du cursus ingénieur sont représentées dans le tableau ci-dessous :
---- ---- ---- ---- ---- Parcours
---- ----
Diplômes ---- ----
Tronc
Commun
Parcours
Électif
Stages
ECL
S5, S6, S7
S8 ♦, S9 ♦
Exécution
Application ♦
TFE ♦
Double-Diplômes
ECL-ENSAL
S5, S6, S7
S8 ♦, S9 ♦
Exécution Application ♦ TFE ♦
ECL-ENSL
Étendu S5, S6, S7,S8
Exécution
Application TFE
ECL-EML
ECL-ENSAE
Étendu
S5, S6, S7,S8
Exécution
Application
ECL-Médecine
Étendu S5, S6, S7,S8
Exécution
Application TFE
ECL-Univ.
Étendu
S5, S6, S7,S8
Exécution
Application
+--------------+--------------------------+---------------+-------------------------+----------------------------+
| | Parcours | Tronc Commun | Parcours Électif | Stages |
+--------------+--------------------------+---------------+-------------------------+----------------------------+
| | ECL | S5, S6, S7 | S8 ♦, S9 ♦ | Exécution Application ♦ TFE ♦ |
+--------------+--------------------------+---------------+-------------------------+----------------------------+
| Double- | ECL-ENSAL | S5, S6, S7 | S8 ♦, S9 ♦ | Exécution Application ♦ TFE ♦ |
| Diplômes | ECL-ENSL | Étendu S5, S6, S7, S8 | | Exécution Application TFE |
| | ECL-EML ECL-ENSAE | Étendu S5, S6, S7, S8 | | Exécution Application |
| | ECL-Médecine | Étendu S5, S6, S7, S8 | | Exécution Application TFE |
| | ECL-Univ. | Étendu S5, S6, S7, S8 | | Exécution Application |
+--------------+--------------------------+---------------+-------------------------+----------------------------+
* ECL = diplôme d’ingénieur de l’École Centrale de Lyon;
* ENSAL = diplôme d’état d’Architecte valant grade de master de l’École Nationale Supérieure d’Architecture de Lyon;
......@@ -152,82 +125,35 @@ Application
* EML = diplôme du programme Grande École (MSc in Management) de l’EMLyon Business School;
* ENSAE = diplôme de l’École Nationale de la Statistique et de l?Administration Économique Paristech ;
* Univ. = diplôme de l’Université étrangère partenaire.
L’ensemble ♦ (Parcours Électif + Stage d’Application + TFE) peut être réaménagé de la façon suivante :
Aménagement
Parcours
Électif
Stages
sans
S8, S9
Application
TFE
1
1 S. étranger
S9
TFE
2
S8
2 S. étranger *
Application
TFE
3
S8
> 3 S. étranger •
Application
L’ensemble ♦ (Parcours Électif + Stage d’Application + TFE) peut être réaménagé de la façon suivante :
+--------------+--------------------------+--------+
| Aménagement | Parcours Électif | Stages |
+--------------+--------------------------+--------+
| sans | S8, S9 | Application TFE |
| 1 | 1 S. étranger S9 | TFE |
| 2 | S8 2 S. étranger * | Application TFE |
| 3 | S8 > 3 S. étranger • | Application |
+--------------+--------------------------+--------+
* * = deux semestres académiques (non diplômants) effectués dans une université étrangère partenaire validant au moins 30 crédits ECTS ou équivalent OU deux semestres académiques effectués dans une université étrangère non partenaire, sanctionnés par le diplôme de l’université d’accueil ;
* • = au moins trois semestres académiques incluant un projet de recherche effectués dans une uni-
versité étrangère non partenaire, sanctionnés par le diplôme de l’université d’accueil.
Pour les élèves admis en formation double-diplômante, les différentes variantes du cursus ingénieur sont représentée dans le tableau ci-dessous :
---- ---- ---- ---- ---- Parcours
---- ----
Diplômes ---- ----
Tronc
Commun
Parcours
Électif
Stages
ENSAL-ECL
S5, S6, S7
S8 ♦, S9 ♦
Exécution
Application ♦
TFE ♦
ENSL-ECL
ENSAE-ECL
Étendu
S7, S8, S9
Application
TFE
EML-ECL
S5, S6, S7
Réduit S9
Exécution
Application TFE
Mahindra - ECL
Étendu
S7 d’intégration, S8, S9
Application
TFE
Médecine - ECL
Étendu
S5, S6, S7, S8
Exécution
Application
Univ.- ECL (1)
Étendu
S5, S6, S7, S8
Exécution
Application
Univ.- ECL (2)
Étendu
S7, S8, S9
Application
TFE
Pour les élèves admis en formation double-diplômante, les différentes variantes du cursus ingénieur sont représentée dans le tableau ci-dessous :
+-------------------+---------------+--------------------------+------------------------+
| Parcours Diplômes | Tronc Commun | Parcours Électif | Stages |
+-------------------+---------------+--------------------------+------------------------+
| ENSAL-ECL | S5, S6, S7 | S8 ♦, S9 ♦ | Exécution Application ♦ TFE ♦ |
|ENSL-ECL/ENSAE-ECL | | Étendu S7, S8, S9 | Application TFE" |
| EML-ECL | S5, S6, S7 | Réduit S9 | Exécution Application TFE |
| Mahindra - ECL | | Étendu S7 d’intégration, S8, S9 | Application TFE |
| Médecine - ECL | Étendu S5, S6, S7, S8 | | Exécution Application |
| Univ.- ECL (1) | Étendu S5, S6, S7, S8 | | Exécution Application |
| Univ.- ECL (2) | | Étendu S7, S8, S9 | Application TFE |
+-------------------+---------------+--------------------------+------------------------+
* ENSAL-ECL correspond aux élèves de l’École Nationale Supérieure d’Architecture de Lyon admis en première année;
* ENSL-ECL = correspond aux élèves de l’École Normale Supérieure de Lyon admis en deuxième année;
......@@ -247,12 +173,12 @@ La sous-commission en charge des échanges internationaux (CEU internationale) e
La sous-commission en charge des échanges en France (CEU France) est présidée par le Directeur de l’École Centrale de Lyon ou son représentant ; elle est composée d’au moins un représentant de la Direction des Formations (incluant le Service de Scolarité), d’au moins un représentant de la Direction du Développement des Relations Internationales et des responsables des doubles cursus avec des établissements partenaires en France.
Les sous-commissions peuvent inviter toute personne compétente pour les assister dans leurs travaux, notamment les responsables des équipes pédagogiques et des cursus (UE, options/métiers, etc.) pour les mobilités entrantes.
2. Echanges universitaires
2. Mobilités internationales
La CEU internationale examine les dossiers des étudiants candidats au recrutement dans le cadre des accords internationaux de l’établissement pour admission en qualité d’élèves à l’École Centrale de Lyon pour une scolarité de deux ans en vue de l’obtention du diplôme d’ingénieur généraliste de l’École Centrale de Lyon. Elle examine aussi les dossiers des étudiants candidats pour une scolarité en 3e année en vue de l’obtention du DESECL ou l’acquisition de crédits ECTS (European Credit Transfert System), ainsi que pour le certificat de formation à la recherche et l’admission pour un échange d’un semestre en S8. Dans tous les cas, ces candidats sont en priorité des étudiants proposés par les universités partenaires. Le Directeur de l’École Centrale de Lyon fixe la liste des élèves admis sur titre sur proposition de la Commission des Echanges Universitaires.
La CEU internationale examine également les dossiers des élèves ingénieurs centraliens qui sont candidats à une formation double diplomante ou un échange dans une université étrangère suivant les critères présentés dans le dossier de demande. Elle statue sur l’autorisation à postuler dans un ou plusieurs établissements (à l’exclusion de tout autre) dans le cadre d’un échange. En cas de refus, les motifs de cette décision seront transmis aux élèves concernés. L’élève est finalement autorisé à partir lorsque l’établissement d’accueil émet un avis favorable pour l’accueillir, après validation de son Tronc Commun (Étendu le cas échéant) par le jury de Tronc Commun, et après validation du learning agreement par la Direction du Développement des Relations Internationales selon les modalités indiquées.
2. Echanges universitaires
3. Mobilités en France
La CEU France examine les dossiers des étudiants candidats au recrutement dans le cadre des accords avec des établissements partenaires en France (et l’École Centrale de Casablanca) pour une admission sur titre en qualité d’élèves à l’École Centrale de Lyon ou en double diplôme pour une scolarité de deux ou trois ans en vue de l’obtention du diplôme d’ingénieur généraliste de l’École Centrale de Lyon. Elle examine aussi les dossiers des étudiants issus d’établissements partenaires en France, candidats pour une scolarité en 3e année en vue de l’obtention du DESECL. Le Directeur de l’École Centrale de Lyon fixe la liste des élèves admis sur titre sur proposition de la Commission des Echanges Universitaires.
La CEU France examine également les dossiers des élèves ingénieurs centraliens qui sont candidats à une formation double diplomante ou un échange dans un établissement partenaire en France suivant les critères présentés dans le dossier de demande. Elle statue sur l’autorisation à postuler dans un ou plusieurs établissements (à l’exclusion de tout autre) dans le cadre d’un échange. En cas de refus, les motifs de cette décision seront transmis aux élèves concernés. L’élève est finalement autorisé à partir lorsque l’établissement d’accueil émet un avis favorable pour l’accueillir et après validation de son Tronc Commun (Étendu le cas échéant) par le jury de Tronc Commun.
......@@ -386,8 +312,6 @@ Les Actions de Formation de l’UE Électif, l’UE MOD et les MOS de l’UE Sec
Les Actions de Formation de l’UE Métier et les MSO de l’UE Secteur sont des Actions de Formation dont le bon déroulement est obtenu à travers la participation active des élèves et des auditeurs. Avec l’accord du Conseil de l’Unité d’Enseignement concernée, la participation et la présence des élèves et auditeurs dans ces AF pourront faire l’objet d’une évaluation chiffrée. Un avis sur le comportement général de l’élève au cours des activités de ces Actions de Formation (adaptation et intégration dans la vie d’option, présence, travail personnel et autonomie, aptitude à travailler en équipe) est exigé pour chaque élève et pour chaque auditeur.
Les Unités d’Enseignement spécifiques au Parcours Électif sont des UE dont les AF suivies par un élève résulte de son choix. Ce type d’UE est validé par un élève ou un auditeur si la note globale de chaque Action de Formation est supérieure ou égale à 10.
Dans le cas d’une note globale d’Action de Formation d’un élève ou d’un auditeur strictement inférieure à 10 avec la note globale d’UE supérieure ou égale à 10, le Conseil de l’Unité d’Enseignement doit faire au Jury de Parcours Électif une proposition motivée de validation pour cet élève ou auditeur. Cette proposition se fonde sur une appréciation générale du travail personnel de l’élève ainsi que sur son implication. Pour cela, le Conseil d’UE se fonde sur différents paramètres incluant les notes de compétence de l’UE ainsi que l’absentéisme.
Dans le cas où la note globale d’UE est strictement inférieure à 10, la validation de l’UE serait directement discutée par le Jury.
......@@ -445,7 +369,7 @@ est décidé par la Direction des Formations, sur la base du dossier déposé pa
1. Transmission au Jury
L’ensemble des notes (notes de Savoir et de Savoir-Faire évaluées, notes globale d’UE et notes de Compétences Transversales) est transmis au Jury à la fin du semestre par le Service de la Scolarité.
10. Dossier scolaire de l’élève
2. Éléments du dossier
Le Service de la Scolarité constitue pour chaque élève un dossier scolaire qui comprend :
* les feuilles de synthèse semestrielles incluant les décisions des jurys ;
......@@ -454,7 +378,7 @@ Le Service de la Scolarité constitue pour chaque élève un dossier scolaire qu
* les informations éventuellement fournies par les Conseils d’Unité d’Enseignement;
* divers autres documents personnalisés ayant trait à la scolarité de l’élève, y compris les éventuels compléments d’information transmis par l’élève et PVs d’audition par une commission issue d’un Jury, les certificats médicaux, les relevés d’absences et les éventuels avertissements ou blâmes.
10. Dossier scolaire de l’élève
3. Feuilles de synthèse
Les feuilles de synthèse semestrielles mentionnent :
* les notes globales de chaque Action de Formation et de chaque UE suivies par l’élève durant le semestre;
......@@ -467,38 +391,20 @@ Les feuilles de synthèse semestrielles mentionnent :
* les décisions des jurys prises à partir des mesures à leur disposition et décrites dans l’Annexe J
« Fonctionnement des Jurys », page 29.
10. Dossier scolaire de l’élève
4. Barème d’évaluation
Le barème d’évaluation défini à la suite prend en compte deux critères : la position de l’élève au sein de sa promotion et la note obtenue. Selon la décision du Conseil d’Administration en date du 1er mars 2000, la meilleure des transcriptions est retenue entre les 2ème et 3ème colonnes du tableau suivant.
Evaluation
Note /20
Pourcentage d’élèves
ayant validé l’activité
Signification
A
≥ 14
10
Excellent
B
∈ [12, 14[
25
Très Bien
C
∈ [11, 12[
30
Bien
D
∈ [10, 11[
35
Suffisant
J
Validé par le Jury
F
< 10
Insuffisant
+------------+-----------+----------------------------+--------------+
| Evaluation | Note/20 | Pourcentage d’élèves ayant | Signification|
| | | validé l’activité | |
+------------+-----------+----------------------------+--------------+
| A | ≥ 14 | 10 | Excellent |
| B | ∈ [12, 14[| 25 | Très Bien |
| C | ∈ [11, 12[| 30 | Bien |
| D | ∈ [10, 11[| 35 | Suffisant |
| J | – | – | Validé par le Jury |
| F | < 10 | – | Insuffisant |
+------------+---------+----------------------------+--------------+
Dans le cas où le barème ci-dessus est appliqué à l’évaluation d’une UE et où la note globale de l’UE est strictement inférieure à 10/20, si l’UE a été validée par décision du Jury (compensation ou autre), l’évaluation de l’UE est J, sinon l’évaluation de l’UE est F.
......@@ -593,7 +499,7 @@ D’après le décret numéro 2005-1617 du 21 décembre 2005, les élèves et le
3. la conservation, durant cinq ans, des notes à des épreuves ou des unités obtenues à l’un des examens [...] ;
4. l’étalement sur plusieurs sessions du passage des épreuves de l’un des examens [...] ».
6. Scolarité en situation de handicap
23. Aménagements
Les aménagements prévus par le décret sont mis en œuvre par l’École Centrale de Lyon suivant la procédure définie ci-dessous.
1. Déclaration des élèves et des auditeurs en situation de handicap : si son handicap est permanent ou déclaré lors de son inscription à l’École Centrale de Lyon, l’élève doit déposer une demande d’aménagement auprès du Service de la Scolarité lors de son inscription à l’École Centrale de Lyon. Dans le cas où son handicap se déclare en cours de scolarité, qu’il soit temporaire ou non, l’élève doit déposer sa demande d’aménagement lorsqu’il se déclare.
......@@ -1081,78 +987,4 @@ Une commission est créée (Commission Mobilité) pour assister la Direction des
Allègement Pour les élèves du parcours ECL tel que définis section A.1 et pour les élèves primo-entrants avant l’année universitaire 2018-2019, la durée minimale totale est ramenée de 21 semaines à 12 semaines.
4. Le Président du BDE transmet chaque année la liste des postes pouvant bénéficier d’une dispense de mobilité ; pour bé- néficier effectivement de cette dispense, chaque élève concerné doit déposer une demande individuelle auprès du Directeur des Formations.
\ No newline at end of file
4. Le Président du BDE transmet chaque année la liste des postes pouvant bénéficier d’une dispense de mobilité ; pour bénéficier effectivement de cette dispense, chaque élève concerné doit déposer une demande individuelle auprès du Directeur des Formations.
\ No newline at end of file
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_())
visuel.py 0 → 100644
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QTextEdit, QLineEdit, QPushButton, QSizePolicy, QListWidget, QListWidgetItem,QLabel
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette, QColor
from PyQt5.QtGui import QPixmap
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
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 extract_keywords_textblob_french(sentence):
stop_words = set(stopwords.words('french'))
mots_questions = ['qui', 'quoi', '', 'quand', 'pourquoi', 'comment', 'quel', 'quelle', 'quels', 'quelles', 'est-ce que', 'y a-t-il', 'peut-on', 'sont-ils', 'sont-elles', 'combien', 'lequel', 'laquelle', 'lesquels', 'lesquelles', 'est-ce', 'n\'est-ce pas', 'savoir', 'pouvez-vous', 'êtes-vous', 'avez-vous', 'dois-je', 'quelqu\'un', 'quelque chose']
stop_words=stop_words.union(mots_questions)
words = word_tokenize(sentence, language='french')
keywords = [word for word in words if word.lower() not in stop_words]
return ' '.join(keywords)
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)[-3:][::-1]
# Retrieve the corresponding text lines
best_answers = [text_lines[i]+"\n" for i in top_indices]
return best_answers
class WrappingLabel(QLabel):
def __init__(self, text='', parent=None):
super(WrappingLabel, self).__init__(text, parent)
self.setWordWrap(True)
class StyledListWidgetItem(QListWidgetItem):
def __init__(self, text='', parent=None):
super(StyledListWidgetItem, self).__init__(parent)
self.setText(text)
def initStyle(self):
palette = QPalette()
palette.setColor(QPalette.Highlight, QColor("#4b5261")) # Couleur de fond pour l'élément sélectionné dans la liste d'historique
palette.setColor(QPalette.HighlightedText, QColor("#ff0000")) # Couleur du texte pour l'élément sélectionné dans la liste d'historique
self.setData(Qt.UserRole, palette)
class StyledListWidget(QListWidget):
def __init__(self, parent=None):
super(StyledListWidget, self).__init__(parent)
self.setAlternatingRowColors(False)
self.setStyleSheet("""
QListWidget {
background-color: #282c34; /* Couleur de fond pour la liste d'historique */
color: #abb2bf; /* Couleur du texte dans la liste d'historique */
border-radius: 10px; /* Coins arrondis */
}
""")
def addStyledItem(self, text):
item = StyledListWidgetItem(text)
item.initStyle()
self.addItem(item)
class ChatbotInterface(QWidget):
def __init__(self):
super().__init__()
file_path = 'reglementdescolarite-ingegeneraliste2324-1.docx.txt'
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()
self.command_history = [] # Pour stocker l'historique des commandes
self.dico={}
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.user_input_entry.setMinimumHeight(40)
self.send_button = QPushButton("Envoyer", self)
self.send_button.setMinimumSize(self.user_input_entry.width(), 30) # Ajustez selon vos besoins
self.send_button.setMaximumSize(200, 60)
self.send_button.clicked.connect(self.send_message)
# Historique à droite
self.history_list_widget = StyledListWidget(self)
self.history_list_widget.itemClicked.connect(self.history_item_clicked)
self.history_list_widget.setFixedWidth(200) # Ajuster la largeur selon vos besoins
# Configurer la mise en page
layout = QVBoxLayout(self)
h_layout = QHBoxLayout()
# Widgets à gauche
left_layout = QVBoxLayout()
left_layout.addWidget(self.conversation_text)
left_layout.addWidget(self.user_input_entry)
# Ajouter le bouton "Envoyer" avec une taille réduite
self.send_button.setMaximumWidth(self.send_button.width() // 3)
left_layout.addWidget(self.send_button, alignment=Qt.AlignRight)
h_layout.addLayout(left_layout)
# Historique à droite
h_layout.addWidget(self.history_list_widget)
layout.addLayout(h_layout)
# 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)
# Appliquer les styles
self.setStyleSheet("""
QWidget {
background-color: #282c34; /* Couleur principale de fond pour l'application */
color: #abb2bf; /* Couleur du texte principal */
}
QTextEdit, QLineEdit {
background-color: #2c313a; /* Couleur de fond pour la zone de texte et d'entrée utilisateur */
color: #abb2bf; /* Couleur du texte dans la zone de texte et d'entrée utilisateur */
border-radius: 10px; /* Coins arrondis */
}
QPushButton {
background-color: #61afef; /* Couleur de fond pour le bouton Envoyer */
color: #282c34; /* Couleur du texte sur le bouton Envoyer */
border-radius: 10px; /* Coins arrondis */
}
""")
self.user_input_entry.returnPressed.connect(self.send_message)
self.history_list_widget.itemClicked.connect(self.history_item_clicked)
def send_message(self):
user_command = self.user_input_entry.text()
if len(user_command)>0:
self.conversation_text.clear()
self.conversation_text.append(f"Commande utilisateur: {user_command}")
best_answers = get_best_answers(user_command, 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\n")
self.conversation_text.append(chatbot_response)
# Ajouter la commande à l'historique
user_command1=extract_keywords_textblob_french(user_command)
self.command_history.append(user_command1)
self.dico[user_command1]= chatbot_response
# Mettre à jour la liste d'historique
self.update_history_list()
self.user_input_entry.clear()
else:
pass
def set_logo(self, image_path):
pixmap = QPixmap(image_path)
self.logo_label.setPixmap(pixmap)
self.logo_label.setScaledContents(True)
def update_history_list(self):
self.history_list_widget.clear()
for command in self.command_history:
self.history_list_widget.addStyledItem(command)
def history_item_clicked(self, item):
self.conversation_text.clear()
# Réafficher le contenu dans la conversation_text lorsque l'élément de l'historique est cliqué
selected_index = self.history_list_widget.row(item)
if selected_index < len(self.command_history):
selected_command = self.command_history[selected_index]
self.conversation_text.append(f"Commande utilisateur: {selected_command}")
# Traiter la commande et obtenir la réponse du chatbot (vous devrez ajuster cela en fonction de votre application)
chatbot_response = f"Réponse du chatbot pour la commande: {self.dico[selected_command]}"
self.conversation_text.append(chatbot_response)
if __name__ == '__main__':
app = QApplication(sys.argv)
chatbot_app = ChatbotInterface()
# Centrer la fenêtre
screen = app.primaryScreen()
center_point = screen.availableGeometry().center()
chatbot_app.move(center_point - chatbot_app.rect().center())
# Ajuster la taille de la fenêtre
new_width = screen.availableGeometry().width() // 2
chatbot_app.resize(new_width, screen.availableGeometry().height()*7/8)
chatbot_app.show()
sys.exit(app.exec_())
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment