-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
61 lines (47 loc) · 1.89 KB
/
main.py
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
"""
Projet : pyChatBot
Auteurs : Pierre Cameleri, Raphaël Guignolle
Description : Programme d'initialisation du chatbot
"""
from semantics import *
from vectors import *
from consts import *
from menu import *
def ask_chatbot() -> None:
"""
Permet d'interpréter une question de l'utilisateur et de renvoyer la réponse la plus probante
"""
prompt = ""
while prompt == "":
prompt = input("Entrer votre demande : ")
# Traite le prompt
format_prompt = tokenization(prompt)
matched = correspondence(format_prompt)
# Vérifie que les mots de la question en commun avec le corpus ne soit pas uniquement des mots non importants
if matched == [] or set(matched).issubset(set(less_important_words(False, 0))):
print("Le corpus fourni ne permet pas au chatbot de répondre à la question posée.")
return
# Récupère la matrice tf-idf du prompt
tfidf_prompt = get_prompt_tfidf(matched)
# Récupère le texte le plus similaire
simi_text = get_similar_text(tfidf_prompt)
# Récupère le mot avec le plus grand score tf-idf du prompt
better_prompt_word = get_tfidf_max_from_text(tfidf_prompt, PROMPT_TEXT)
# Récupère la première phrase ou le mot avec le plus grand score tf-idf apparait
with open(CORPUS_IN + '/' + simi_text, 'r', encoding="utf-8") as simi:
sentence = get_sentence_from_word(simi.read(), better_prompt_word)
# Ajoute un préfix à la réponse
answer = precise_answer(prompt, sentence)
# Fin et affichage
print("Réponse : ")
print("\t" + answer)
OPTIONS_MAIN = (
("Sortir", exit),
("Ouvrir le menu dans le programme", lambda: do_menu(OPTIONS_MENU, False)),
("Demander quelque chose au chatbot", ask_chatbot)
)
if __name__ == "__main__":
print("Prétraitement des données ...")
format_incorpus(CORPUS_IN, CORPUS_CLEAN)
while True:
do_menu(OPTIONS_MAIN, True)