Réécriture du jeu https://cemantix.herokuapp.com/ dans un terminal
Go to file
Yohann D'ANELLO 98559b66aa
Add README
Signed-off-by: Yohann D'ANELLO <ynerant@crans.org>
2022-05-04 21:19:08 +02:00
.gitignore Add README 2022-05-04 21:19:08 +02:00
LICENSE Add LICENSE 2022-05-04 21:10:19 +02:00
README.md Add README 2022-05-04 21:19:08 +02:00
go.mod Better display 2022-04-28 22:06:54 +02:00
go.sum Better display 2022-04-28 22:06:54 +02:00
lemmes.txt Add Python script that generates a new word and the similarity values 2022-05-04 21:10:03 +02:00
main.go Display ranking only for positive values 2022-05-04 17:28:39 +02:00
new_word.py Add Python script that generates a new word and the similarity values 2022-05-04 21:10:03 +02:00

README.md

Cemantix -- Terminal edition

Introduction

Ce jeu est largement inspiré de Cemantix : https://cemantix.herokuapp.com/, publié par @enigmathix.

Dans ce jeu, vous devez trouver un mot en faisant des propositions successives, et une distance vous est donnée, calculée en utilisant Word2Vec. Cette distance est une distance sémantique : deux mots vont être proches s'ils sont relativement similaires. Par exemple, les mots « identique » et « similaire » ont un taux de similarité d'environ 54.87 %, selon notre modèle, ce qui est relativement élevé.

Pour jouer, il suffit d'ouvrir un terminal et de lancer, pour l'instance principale :

$ ssh -p 2200 cemantix.ynerant.fr

Un nouveau mot est généré chaque jour à minuit heure de Paris.

Jeu de données

Le jeu de données provient d'une extraction des pages de Wikipédia France, que l'on peut trouver ici : https://dumps.wikimedia.org/frwiki/latest/ Les textes ont été entraînés en utilisant cet utilitaire autour de word2vec : https://github.com/jind11/word2vec-on-wikipedia

Un jeu entraîné par mes propres soins (29 avril 2022) peut être trouvé ici : https://perso.crans.org/ynerant/frwiki.skip.size500.win10.neg15.sample1e-5.min15.bin

En plus de cet entraînement de données, un dictionnaire de mots admissibles est utilisé. Il s'agit de la liste des mots qui peuvent servir à fournir un mot aléatoire, et dans laquelle l'utilisateur⋅rice a le droit de proposer un mot. Cette liste est restreinte aux lemmes, c'est-à-dire aux racines des mots, en excluant donc les éventuels verbes conjugués ou mots déclinés au féminin ou au pluriel. Cette liste est ensuite intersectée avec les mots connus du jeu de données. Le fichier lemmes.txt est issu de ce travail de filtrage à partir des données du site https://grammalecte.net/download.php?prj=fr .

Installation

Si vous voulez déployer ce serveur chez vous, vous avez besoin des prérequis suivants :

  • Golang
  • Python 3
    • numpy
    • scipy
    • gensim

Pour les installer, avec une distribution basée sur Debian ou Ubuntu :

$ sudo apt install golang python3-pip python3-numpy python3-scipy
$ sudo pip3 install gensim  # Ou installation locale

Sous Arch Linux :

sudo pacman -Sy go python-pip python-numpy python-scipy
sudo pip install gensim  # Ou installation locale
yay -Sy python-gensim  # Alternative utilisant yay

Une fois ces quelques dépendances installées, il vous suffit de lancer go build pour générer le bon binaire. Récupérez le jeu de données entraînées cité plus haut et placez-le dans le dossier du projet, sans renommer le fichier.

Lancez enfin le script new_word.py, qui prend quelques secondes. Cela va générer un fichier cemantix.txt en conservant un historique daté dans le dossier history, qui permettra au serveur de connaître les différents scores de chaque mot, sans avoir à les recalculer à la volée.

Enfin, il suffit de lancer le serveur ./cemantix-charm pour lancer le serveur SSH du jeu. Cela ouvre un serveur SSH sur le port 2200 écoutant sur toutes les adresses, avec des clés stockées dans un dossier .ssh créé si ce n'était pas déjà fait. On peut enfin jouer en lançant ssh -p 2200 localhost. N'hésitez pas à actualiser votre configuration pare-feu pour permettre d'éventuelles connexions depuis l'extérieur.

À l'heure actuelle, il n'est pas possible de configurer le serveur, notamment les adresses et les ports d'écoute.

Vous pouvez ensuite définir par exemple un cron qui vient appeler le script new_word.py toutes les nuits, pour redéfinir le nouveau mot à trouver. Il n'est pas nécessaire de redémarrer le serveur.

Développement

Le projet est réalisé en Go (sauf la partie traitement des mots qui est faite en Python), en utilisant beaucoup le framework BubbleTea ainsi que l'intégration SSH Wish, de la suite libre charm.sh.

J'ai un problème / une suggestion

N'hésitez pas à ouvrir un ticket si vous le pouvez, ou à envoyer un mail à l'adresse ynerant+cemantix@crans.org :)