108 lines
4.1 KiB
Markdown
108 lines
4.1 KiB
Markdown
# Cemantix -- Terminal edition
|
||
|
||
## Introduction
|
||
|
||
Ce jeu est largement inspiré de Cemantix : https://cemantix.herokuapp.com/,
|
||
publié par [@enigmathix](https://twitter.com/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](https://fr.wikipedia.org/wiki/Word2vec|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 :
|
||
|
||
```bash
|
||
$ 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 :
|
||
|
||
```bash
|
||
$ sudo apt install golang python3-pip python3-numpy python3-scipy
|
||
$ sudo pip3 install gensim # Ou installation locale
|
||
```
|
||
|
||
Sous Arch Linux :
|
||
|
||
```bash
|
||
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](https://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 :)
|