|
||
---|---|---|
.gitignore | ||
go.mod | ||
go.sum | ||
lemmes.txt | ||
LICENSE | ||
main.go | ||
new_word.py | ||
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 :)