Générateur de texte Samuel Moix Lycée-Collège de la Planta Sion (VS) Mark Zeman Fachhochschule Nordwestschweiz Brugg-Windisch (AG)
Introduction Le but du projet est d implémenter une chaîne de Markov et à l aide de celle-ci générer du texte. Ensuite, nous devons créer une interface qui permet à un utilisateur quotidien d utiliser le programme. Lorsque l on introduit du texte dans le programme, celui-ci crée des nouvelles phrases et les affiches. Dans un premier temps, nous verrons ce qui a été étudié, puis comment le programme a été codé et finalement ce qui a été appris. Le projet a été développé avec Igor Ranisavljevic et avec l aide d un apprenti et d un étudiant en Master. Pour réussir à créer un générateur de texte avec une chaîne de Markov, il faut tout d abord savoir ce qu est une chaîne de Markov. Le nom vient du mathématicien russe Andreï Markov. En gros, il s agit d un système mathématique qui saute d un état à un autre. Le but est de savoir dans quel état on se trouve et ensuite quels sont les états suivants possibles. En d autres termes, c est la prédiction du futur à partir du présent. Pour notre générateur de texte, nous contrôlons l état d un mot et les mots qui peuvent le suivre. Par exemple si l on a comme phrases : «Je rentre à la maison à pied» et «Il rentre dans la cuisine», l on peut obtenir la phrase «Je rentre dans la cuisine». Avec ce système, plus l on a de phrases plus les phrases vont varier. Il est possible d obtenir des phrases plus réaliste en contrôlant deux mots au lieu d un, mais le contenu changera moins. Pour ce générateur de texte, il ne faut rien d autre, à part un critère d arrêt pour éviter d entrer dans une boucle infinie. Matériel et Méthode Le programme peut être programmé en différents langages de programmation. Nous avons décidé d utiliser du Python pour la partie programme, car nous avions vu les bases dans le cadre des cours au collège. Nous avons tout de même bien été guidés et aidés par les étudiants de la «FHNW». Je me suis chargé de la GUI (Interface visuelle) avec du HTML et du CSS. Le HTML et le CSS sont des langages de programmation du Web. L HTML permet de structurer la page et le CSS permet de la styliser. Les programmes de codages utilisés étaient Pycharm et Notepad++. Notepad++ est simplement un éditeur de texte, alors que PyCharm est un environnement de développement intégré, il facilite donc la programmation en Python. Nous avons également utilisé et découvert Git. C est un logiciel qui permet de créer un projet, y ajouter des gens et mettre à jour tout le travail de chacun régulièrement à travers internet. Pour faire la chaîne Markov, nous avons d abord séparé les phrases en regardant tous les endroits où se trouvaient des points (d interrogation, d exclamation) suivis d un espace. Le
mot en fin de phrase nous sert comme critère d arrêt. Mais en cas de boucles entre mots, nous avons défini une limite entre 20 et 30 mots par phrases. Ensuite, on sépare les mots grâce à l espace qui les sépare dans un texte. Chaque mot va être contrôlé. Si le mot n a pas encore été rencontrer l on créer une liste. Dans cette liste, l on met tous les mots qui ont suivi ce mot. Si le mot a déjà été rencontré, l on ajoute simplement le prochain mot à sa liste. Le logiciel va ensuite commencer avec un mot et générer une phrase jusqu à qu il atteint le critère d arrêt ou un mot de fin de phrase. Le nombre de phrases générer peutêtre déterminer par l utilisateur. Pour l interface, nous avons créé une page internet. Ci-dessous se trouve une partie du code HTML. Tout le code est ciblé par la classe «container» qui crée le lien avec le code CSS afin de styler notre page (et ainsi notre GUI). Ensuite, il y a la balise <h1> où se trouve le titre, suivis de la zone d entrée créée à l aide des formulaires HTML. Dans le formulaire l on a deux types d entrées. D abord celle du texte (<textarea>) et ensuite celle du choix de nombre de phrases à générer (<input type= «number» ) qui force à mettre un chiffre et non pas des lettres. Finalement il y a le bouton qui crée le lien avec le JavaScript par la fonction «FbuttonGenerate(event)» qui va lancer le programme Python.
Le plus difficile était de faire le lien entre la page internet et le programme Python. Pour ce faire, nous avons utilisé le module (ensemble de fonctions) CherryPy et le code JavaScript. Ceci m a permis de découvrir quelques notions de JavaScript. Sur l interface l on trouve : une entrée de texte, un choix de nombre de phrases à générer, un bouton pour envoyer le texte au programme et un endroit où le résultat est affiché. Résultat Voilà à quoi ressemble notre interface avec un exemple de phrase créée : Les phrases données étaient : «The early bird might get the worm, but the second mouse gets the cheese.» et «People say nothing is impossible, but I do nothing every day. Comme l input est réduit l output le sera également. Les seuls mots que l on retrouve dans le deux phrases sont «the» et «but». L on a donc obtenu «The early bird might get the worm, but I do nothing every day». Argumentation Ce programme ne sert en soi pas à grand-chose. Il permet de générer des phrases assez loufoques, mais pourrait être amélioré pour créer des noms de personnages, de villes ou encore de planètes. La partie pratique de ce programme est que l on peut cibler la réponse et obtenir quelque chose souhaité, mais différent. Il fonctionne aussi avec la majorité des langues, comme il se base sur ce qu il reçoit. L affichage par un site web avec le programme Python comme serveur fonctionne bien, mais il aurait été bien de forcer l utilisateur à mettre des chiffres (pour le nombre de phrases générées) au niveau du serveur Python et non pas seulement au niveau du client en HTML.
Ceci n est pas vraiment important dans ce cas, mais c est le genre d erreur qui mène à des failles de sécurité dans les systèmes. De plus nous aurions pu améliorer le code pour éviter d avoir des guillemets ou d autres signes de ponctuation aux mauvais endroits ou encore offrir d autres options pour l utilisateur. Remerciements Je voudrais tout d abord remercier «La science appelle les jeunes» sans qui cette semaine «fascination informatique» n aurait jamais eu lieu. Un grand merci à Madame Anina Gyger pour toutes les informations et l organisation. Dans un second temps je remercie le Collège de la Planta qui nous a donné l accord de participer à cet événement pendant une semaine de cours. Un grand merci à la Fachhochschule Nordwestschweiz pour son accueil, notamment à Monsieur Claude Rubattel pour notre encadrement, à l étudiant en Master Mark Zeman et à l apprenti Orell Bühler pour leur aide à la réalisation du projet et à Markus Knecht. Et finalement un grand merci à l auberge de jeunesse et tous les gens qui ont participé à l organisation de cette semaine. Références Image de page titre de tagxedo.com Markov Chains. A visual explanation by Victor Powell with text by Lewis Lehe - http://setosa.io/blog/2014/07/26/markov-chains/