{"id":2775,"date":"2020-06-25T11:42:17","date_gmt":"2020-06-25T09:42:17","guid":{"rendered":"https:\/\/www.mathweb.fr\/euclide\/?p=2775"},"modified":"2024-06-09T16:54:16","modified_gmt":"2024-06-09T14:54:16","slug":"un-chatbot-en-python","status":"publish","type":"post","link":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/","title":{"rendered":"Un chatbot en Python"},"content":{"rendered":"\n<p>La logique d&#8217;un chatbot en Python n&#8217;est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l&#8217;essentiel de cette logique.<\/p>\n\n\n\n<!--more-->\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"676\" height=\"338\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/Chatbot.jpg\" alt=\"chatbot en Python\" class=\"wp-image-2776\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/Chatbot.jpg 676w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/Chatbot-300x150.jpg 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/Chatbot-600x300.jpg 600w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><figcaption class=\"wp-element-caption\">chabot en Python<\/figcaption><\/figure>\n<\/div>\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Au menu sur cette page...<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Ce_dont_nous_aurons_besoin_pour_creer_un_chatbot_en_Python\" >Ce dont nous aurons besoin pour cr\u00e9er un chatbot en Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Une_classe_%E2%80%9CChatbot%E2%80%9D_Python\" >Une classe &#8220;Chatbot&#8221; Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Ajouter_une_methode_a_la_classe_pour_la_question\" >Ajouter une m\u00e9thode \u00e0 la classe pour la question<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Ajouter_une_methode_pour_repondre\" >Ajouter une m\u00e9thode pour r\u00e9pondre<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Le_script_final\" >Le script final<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Le_fichier_json_du_chatbot_Python\" >Le fichier json du chatbot Python<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Conclusion\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#Le_resultat_en_video\" >Le r\u00e9sultat en vid\u00e9o<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ce_dont_nous_aurons_besoin_pour_creer_un_chatbot_en_Python\"><\/span>Ce dont nous aurons besoin pour cr\u00e9er un chatbot en Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>La liste est relativement courte. Nous aurons besoin des modules:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tkinter (pour ce qui est interface graphique)<\/li>\n\n\n\n<li>json (pour g\u00e9rer les interactions avec les fichiers json)<\/li>\n\n\n\n<li><a aria-label=\"undefined (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/docs.python.org\/3\/library\/difflib.html\" target=\"_blank\" rel=\"noreferrer noopener\">difflib<\/a> (pour la fonction <em>get_close_matches<\/em>, qui sert \u00e0 trouver les meilleurs r\u00e9sultats correspondant \u00e0 un mot-cl\u00e9).<\/li>\n<\/ul>\n\n\n\n<p>Comme \u00e0 notre habitude, nous n&#8217;importerons pas tout le module tkinter, mais seulement ce dont nous nous servirons, \u00e0 savoir  : Tk, Label, Entry, Button, Text, Scrollbar et Frame.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Une_classe_%E2%80%9CChatbot%E2%80%9D_Python\"><\/span>Une classe &#8220;Chatbot&#8221; Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>On peut cr\u00e9er une classe repr\u00e9sentant le chatbot Python. Nous voulons quelque chose qui ressemble \u00e0 cela :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"402\" height=\"432\" src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/screenshot_chatbot.png\" alt=\"chatbot python\" class=\"wp-image-2777\" srcset=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/screenshot_chatbot.png 402w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/screenshot_chatbot-300x322.png 300w, https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/screenshot_chatbot-279x300.png 279w\" sizes=\"auto, (max-width: 402px) 100vw, 402px\" \/><figcaption class=\"wp-element-caption\">Screenshot chatbot<\/figcaption><\/figure>\n<\/div>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Chatbot:\n    def __init__(self, window):\n        window.title('Mathweb Assitant')\n        window.geometry('400x400')\n        window.resizable(0,0)\n        self.message_session = Text(window, bd=3, relief=\"flat\", font=(\"Times\", 10), undo=True, wrap=\"word\")\n        self.message_session.config(width=45, height=15,bg=\"#008a9c\", fg=\"white\", state='disabled')\n        self.overscroll = Scrollbar(window, command=self.message_session.yview)\n        self.overscroll.config(width=20)\n        self.message_session[\"yscrollcommand\"] = self.overscroll.set\n        self.message_position = 1.5\n        self.send_button = Button(window, text='Envoyer', fg='white', bg='#00813b',width=9,font=('Times', 12), relief ='flat', command = self.reply_to_you)\n        self.Message_Entry = Entry(window, width=40, font=('Times', 12))\n        self.Message_Entry.bind('&lt;Return>', self.reply_to_you)\n        self.message_session.place(x=20, y=20)\n        self.overscroll.place(x=370, y=50)\n        self.send_button.place(x=0, y=360)\n        self.Message_Entry.place(x=135, y=365)\n        self.Brain = json.load(open('mathweb.json',encoding='utf-8'))<\/pre>\n\n\n\n<p>Le constructeur (__init__) d\u00e9finit une fen\u00eatre \u00e0 l&#8217;aide de tkinter. Dans ce constructeur, on d\u00e9finit bien plus qu&#8217;une fen\u00eatre : on y d\u00e9finit aussi sel.Brain, le fichier qui va nous servir de r\u00e9f\u00e9rence pour les r\u00e9ponses. C&#8217;est lui qui contient les mots-cl\u00e9s (nous verrons plus loin sa structure).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ajouter_une_methode_a_la_classe_pour_la_question\"><\/span>Ajouter une m\u00e9thode \u00e0 la classe pour la question<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def add_chat(self, message):\n        self.message_position+=1.5\n        self.Message_Entry.delete(0, 'end')\n        self.message_session.config(state='normal')\n        self.message_session.insert(self.message_position, message)\n        self.message_session.see('end')\n        self.message_session.config(state='disabled')<\/pre>\n\n\n\n<p>La ligne 2 sp\u00e9cifie que l&#8217;on ajoute 1.5 \u00e0 la position de la ligne o\u00f9 l&#8217;on va afficher la question. La ligne 3 supprime la question que l&#8217;on a entr\u00e9e dans le champs de saisie (sur fond blanc, en bas de la fen\u00eatre). On configure l&#8217;objet <em>message_session<\/em> avec un \u00e9tat &#8220;normal&#8221; \u00e0 la ligne 4 sans quoi nous ne voyons pas le message dans la partie verte. Ensuite, on ins\u00e8re la question (le message dans un cas g\u00e9n\u00e9ral) \u00e0 la ligne 5. La ligne 6 (la m\u00e9thode <em>see(&#8216;end&#8217;)<\/em>) permet de voir la derni\u00e8re ligne, le dernier message, dans la fen\u00eatre verte, quand cela d\u00e9borde verticalement. Cela \u00e9vite d&#8217;utiliser la barre de d\u00e9filement vertical \u00e0 chaque fois. La ligne 7 permet de configurer la fen\u00eatre verte de sorte \u00e0 ne pas pouvoir saisir de texte dans cette zone&#8230; car ce n&#8217;est pas son r\u00f4le !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ajouter_une_methode_pour_repondre\"><\/span>Ajouter une m\u00e9thode pour r\u00e9pondre<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">def reply_to_you(self, event=None):\n        message = self.Message_Entry.get().lower()\n        message = 'Vous: '+ message+'\\n'\n        close_match = get_close_matches(message, self.Brain.keys())\n        if close_match:   \n            reply = 'Bot: '+ self.Brain[close_match[0]][0] + '\\n'\n        else:\n            reply = 'Bot: ' + 'L\u00e0... je ne vois pas mon gars !\\n'\n        self.add_chat(message)\n        self.add_chat(reply)<\/pre>\n\n\n\n<p>On commence (ligne 2) par transformer le texte en minuscules. On d\u00e9finit ensuite (ligne 3) le message que l&#8217;on va afficher (on pr\u00e9c\u00e8de ce qui a \u00e9t\u00e9 saisi par &#8220;Vous:&#8221;). Et c&#8217;est \u00e0 la ligne 4 que tout se jour avec la fonction <em>get_close_matches<\/em>, qui retourne une liste des meilleurs r\u00e9sultats correspondant \u00e0 une cha\u00eene de caract\u00e8res. Ici, on puise dans le dictionnaire cr\u00e9\u00e9 dans le constructeur \u00e0 partir du fichier json. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Le_script_final\"><\/span>Le script final<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import json\nfrom difflib import get_close_matches\nfrom tkinter import Tk, Label, Entry, Button, Text, Scrollbar,Frame\n\nclass Chatbot:\n    def __init__(self, window):\n        window.title('Mathweb Assitant')\n        window.geometry('400x400')\n        window.resizable(0,0)\n        self.message_session = Text(window, bd=3, relief=\"flat\", font=(\"Times\", 10), undo=True, wrap=\"word\")\n        self.message_session.config(width=45, height=15,bg=\"#008a9c\", fg=\"white\", state='disabled')\n        self.overscroll = Scrollbar(window, command=self.message_session.yview)\n        self.overscroll.config(width=20)\n        self.message_session[\"yscrollcommand\"] = self.overscroll.set\n        self.message_position = 1.5\n        self.send_button = Button(window, text='Envoyer', fg='white', bg='#00813b',width=9,font=('Times', 12), relief ='flat', command = self.reply_to_you)\n        self.Message_Entry = Entry(window, width=40, font=('Times', 12))\n        self.Message_Entry.bind('&lt;Return>', self.reply_to_you)\n        self.message_session.place(x=20, y=20)\n        self.overscroll.place(x=370, y=50)\n        self.send_button.place(x=0, y=360)\n        self.Message_Entry.place(x=135, y=365)\n        self.Brain = json.load(open('mathweb.json',encoding='utf-8'))\n\n    def add_chat(self, message):\n        self.message_position+=1.5\n        self.Message_Entry.delete(0, 'end')\n        self.message_session.config(state='normal')\n        self.message_session.insert(self.message_position, message)\n        self.message_session.see('end')\n        self.message_session.config(state='disabled')\n        \n    def reply_to_you(self, event=None):\n        message = self.Message_Entry.get().lower()\n        message = 'Vous: '+ message+'\\n'\n        close_match = get_close_matches(message, self.Brain.keys())\n        if close_match:   \n            reply = 'Bot: '+ self.Brain[close_match[0]][0] + '\\n'\n        else:\n            reply = 'Bot: ' + 'L\u00e0... je ne vois pas mon gars !\\n'\n        self.add_chat(message)\n        self.add_chat(reply)\n\nroot = Tk()\nChatbot(root)\nroot.mainloop()<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Le_fichier_json_du_chatbot_Python\"><\/span>Le fichier json du chatbot Python<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Vous l&#8217;aurez compris, ce fichier ne contient qu&#8217;un dictionnaire. Ensuite, tout d\u00e9pend de ce que vous voulez faire de votre chatbot. Il est donc de la forme:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"monokai\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n\"mot-cl\u00e9 1\" : [ \" Une r\u00e9ponse au mot-cl\u00e9 1\"] ,\n\"mot-cl\u00e9 2\" : [ \" Une r\u00e9ponse au mot-cl\u00e9 2\"] ,\n...\n}<\/pre>\n\n\n\n<p>Donc au final, on pourrait facilement se passer de la partie json, mais il est de coutume d&#8217;utiliser de tels formats pour des bots bien plus \u00e9labor\u00e9s&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ce genre de projet peut-\u00eatre int\u00e9ressant \u00e0 faire pour des \u00e9l\u00e8ves de <a href=\"https:\/\/www.mathweb.fr\/euclide\/ressources-python\/\">NSI<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Le_resultat_en_video\"><\/span>Le r\u00e9sultat en vid\u00e9o<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>J&#8217;ai l\u00e9g\u00e8rement am\u00e9lior\u00e9 le code pr\u00e9c\u00e9dent pour arriver \u00e0 cela:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"522\" style=\"aspect-ratio: 1032 \/ 522;\" width=\"1032\" controls src=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot.mp4\"><\/video><figcaption class=\"wp-element-caption\">vid\u00e9o de d\u00e9monstration du chatbot Python<\/figcaption><\/figure>\n\n\n\n<p>Le fichier ainsi modifi\u00e9 et le fichier json sont dans un ZIP ci-dessous:<\/p>\n\n\n\n<div class=\"wp-block-file aligncenter um_article\"><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot.zip\">chatbot<\/a><a href=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot.zip\" class=\"wp-block-file__button wp-element-button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>La logique d&#8217;un chatbot en Python n&#8217;est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l&#8217;essentiel de cette logique.<\/p>\n","protected":false},"author":1,"featured_media":3732,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[132,207],"class_list":["post-2775","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatique","category-python","tag-classe","tag-tkinter"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Un chatbot en Python - Mathweb.fr - Projet int\u00e9ressant pour NSI<\/title>\n<meta name=\"description\" content=\"La logique d&#039;un chatbot en Python n&#039;est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l&#039;essentiel de cette logique.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Un chatbot en Python - Mathweb.fr - Projet int\u00e9ressant pour NSI\" \/>\n<meta property=\"og:description\" content=\"La logique d&#039;un chatbot en Python n&#039;est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l&#039;essentiel de cette logique.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Mathweb.fr\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-25T09:42:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-09T14:54:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot-python.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"740\" \/>\n\t<meta property=\"og:image:height\" content=\"198\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"St\u00e9phane Pasquet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"St\u00e9phane Pasquet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/\"},\"author\":{\"name\":\"St\u00e9phane Pasquet\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"headline\":\"Un chatbot en Python\",\"datePublished\":\"2020-06-25T09:42:17+00:00\",\"dateModified\":\"2024-06-09T14:54:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/\"},\"wordCount\":573,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/chatbot-python.jpg\",\"keywords\":[\"classe\",\"tkinter\"],\"articleSection\":[\"Informatique\",\"Python\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/\",\"name\":\"Un chatbot en Python - Mathweb.fr - Projet int\u00e9ressant pour NSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/chatbot-python.jpg\",\"datePublished\":\"2020-06-25T09:42:17+00:00\",\"dateModified\":\"2024-06-09T14:54:16+00:00\",\"description\":\"La logique d'un chatbot en Python n'est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l'essentiel de cette logique.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/chatbot-python.jpg\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/chatbot-python.jpg\",\"width\":740,\"height\":198,\"caption\":\"chatbot en Python\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/2020\\\/06\\\/25\\\/un-chatbot-en-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Un chatbot en Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#website\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/\",\"name\":\"Mathweb.fr\",\"description\":\"Math\u00e9matiques, LaTeX et Python\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/#\\\/schema\\\/person\\\/e4d3bb07968238378f0d5052a70dcd69\",\"name\":\"St\u00e9phane Pasquet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"url\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"contentUrl\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\",\"width\":74,\"height\":77,\"caption\":\"St\u00e9phane Pasquet\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.mathweb.fr\\\/euclide\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-logo-mathweb.webp\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Un chatbot en Python - Mathweb.fr - Projet int\u00e9ressant pour NSI","description":"La logique d'un chatbot en Python n'est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l'essentiel de cette logique.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/","og_locale":"fr_FR","og_type":"article","og_title":"Un chatbot en Python - Mathweb.fr - Projet int\u00e9ressant pour NSI","og_description":"La logique d'un chatbot en Python n'est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l'essentiel de cette logique.","og_url":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/","og_site_name":"Mathweb.fr","article_published_time":"2020-06-25T09:42:17+00:00","article_modified_time":"2024-06-09T14:54:16+00:00","og_image":[{"width":740,"height":198,"url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot-python.jpg","type":"image\/jpeg"}],"author":"St\u00e9phane Pasquet","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"St\u00e9phane Pasquet","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#article","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/"},"author":{"name":"St\u00e9phane Pasquet","@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"headline":"Un chatbot en Python","datePublished":"2020-06-25T09:42:17+00:00","dateModified":"2024-06-09T14:54:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/"},"wordCount":573,"commentCount":2,"publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot-python.jpg","keywords":["classe","tkinter"],"articleSection":["Informatique","Python"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/","url":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/","name":"Un chatbot en Python - Mathweb.fr - Projet int\u00e9ressant pour NSI","isPartOf":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#primaryimage"},"image":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot-python.jpg","datePublished":"2020-06-25T09:42:17+00:00","dateModified":"2024-06-09T14:54:16+00:00","description":"La logique d'un chatbot en Python n'est pas tr\u00e8s compliqu\u00e9e \u00e0 comprendre. Nous allons voir dans cet article l'essentiel de cette logique.","breadcrumb":{"@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#primaryimage","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot-python.jpg","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2020\/06\/chatbot-python.jpg","width":740,"height":198,"caption":"chatbot en Python"},{"@type":"BreadcrumbList","@id":"https:\/\/www.mathweb.fr\/euclide\/2020\/06\/25\/un-chatbot-en-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.mathweb.fr\/euclide\/"},{"@type":"ListItem","position":2,"name":"Un chatbot en Python"}]},{"@type":"WebSite","@id":"https:\/\/www.mathweb.fr\/euclide\/#website","url":"https:\/\/www.mathweb.fr\/euclide\/","name":"Mathweb.fr","description":"Math\u00e9matiques, LaTeX et Python","publisher":{"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.mathweb.fr\/euclide\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/www.mathweb.fr\/euclide\/#\/schema\/person\/e4d3bb07968238378f0d5052a70dcd69","name":"St\u00e9phane Pasquet","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","url":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","contentUrl":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp","width":74,"height":77,"caption":"St\u00e9phane Pasquet"},"logo":{"@id":"https:\/\/www.mathweb.fr\/euclide\/wp-content\/uploads\/2025\/06\/cropped-logo-mathweb.webp"}}]}},"_links":{"self":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/2775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/comments?post=2775"}],"version-history":[{"count":0,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/posts\/2775\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media\/3732"}],"wp:attachment":[{"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/media?parent=2775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/categories?post=2775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mathweb.fr\/euclide\/wp-json\/wp\/v2\/tags?post=2775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}