4.8 KiB
Plomberie pour utiliser l'algorithme du Jugement majoritaire dans des application de sondages/votes
Ce projet provient de https://www.astrolabe.coop/ pour l'ajout du jugement majoritaire dans l'application de sondage de Nextcloud : https://github.com/nextcloud/polls/issues/3472 .
Qu'est-ce que le jugement majoritaire ?
https://fr.wikipedia.org/wiki/Jugement_majoritaire
Libraire de calcul Jugement majoritaire
Etude
Une étude de l'existant est dans le répertoire étude.
Après cette recherche il est évident que les implémentations à choisir sont dans https://github.com/MieuxVoter
Préparation
Ce projet est plutot un jouet comparé à l'existant. L'idée ici serait d'avoir une API commune ou à minima des formats d'échanges communs.
Cette Librairie
Le fonctionnement actuel est de fournir un fichier json contenant la votation. Ce fichier n'a pas de connaissance des votants, juste de leur vote.
Parmi les méthodes de vote le jugement majoritaire est très récent. C'est la description de wikipedia https://fr.wikipedia.org/wiki/Jugement_majoritaire qui a servi de référence.
(https://en.wikipedia.org/wiki/Majority_judgment)
L'implémentation est très basique et miminale :
| langage | code |
|---|---|
| python | code/parse_sample.py |
| php | code/parse_sample.php |
Formats des votations ( json )
Le format d'entrée est un fichier json, des exemple sont sous le répertoire samples.
Le format de sortie est aussi un fichier json
candidats
les candidats ont des clés textuelles courtes, qui peuvent être numérique ou alpjanumérique et un nom complet de candidat.
"A":"albert",
"B":"Beatrice",
"C":"Chloé",
"D":"Deborah",
"E":"Eric",
"F":"Francçois",
"G":"Gisèle",
"H":"Hugo"
votants
Une indication du nombre de votants sert à valider que tous les votes sont bien listés. C'est une information redondante avec la liste des votes de la votation.
"decompte":10
mentions
La sémantique des mentions est spécifiquer à chaque vote, un texte descriptif indique.
Les mentions sont ordonnées de la mention la meilleure numérotée 0 à la plus mauvaise, la dernière.
|0|Très Bien| |1|Bien| |2|Assez Bien| |3|Passable| |4|Insuffisant| |5|A rejeter|
votation
Pour information une date et un lien de vote sont ajoutés. Leur contenu est textuel et laissé à l'appréciation de l'utilisateur, le champ n'est pas analysé.
"date":"14 juin 2025",
"lieu":"liffré",
votes
le vote est une liste des vote de chaque participant.
chaque vote contient une liste de référence des candidats et le rang de leur mention.
import
Import de fichiers csv provenant de l'application de sondage de nextcloud (polls).
Dans le sondage il est possible d'exporter les votes en csv, le fichier est à fournir au script qui va générer un json. Ce json pourra être utilisé dans le programme de vote pour obtenir le résultat.
Le programme supprime les informations des votants et ne conserve que leur vote.
Les mentions par défaut sont :
|0|yes| |1|maybe| |2|(empty)| |3|no|
ATTENTION ceci ne fonctionne qu'avec une version beta de Nextcloud Poll :
git@github.com:artlog/polls.git majority_judgement_feature
Avec une confiugration du sondage spécifique où les 'Rank Options' ont été nommées, il est nécessaire de passer les noms des mentions dans l'ordre, du meilleur au plus mauvais.
voici l'exemple classique des mentions :
/!\ On remarque la différence entre fr et en.
| index | fr | en |
|---|---|---|
| 0 | Très Bien | Excellent |
| 1 | Bien | Very Good |
| 2 | Assez Bien | Good |
| 3 | Passable | Acceptable |
| 4 | Insuffisant | Poor |
| 5 | A Rejeter | Reject |
ceci donne la commande suivante :
python3 convert_nextcloud_poll_csv.py ../samples/poll1.csv 'Très Bien' 'Bien' 'Assez Bien' 'Passable' 'Insuffisant' 'A Rejeter'
/!\ l'ordre des mention est crucial.
Tests
Voir le README.md en anglais
Applications de vote / sondages
|Nextcloud polls|https://github.com/nextcloud/polls| |framadate|https://framagit.org/framasoft/framadate| |Dudle|https://github.com/kellerben/dudle/| |Croodle|https://github.com/jelhan/croodle| |Rally|https://github.com/lukevella/Rallly|
intégrations
|Yunohost Opensondage|https://github.com/YunoHost-Apps/opensondage_ynh|
Blogs existants sur le sujet
https://blog.genma.fr/?Une-alternative-a-Framadate-Opensondage-dans-Yunohost-et-Polls-dans-Nextcloud https://opensource.com/article/22/4/open-source-alternatives-doodle-polls
Nextcloud Polls
https://github.com/nextcloud/polls
Framadate ?
https://framagit.org/framasoft/framadate
Yunohost Opensondage
C'est un intégration de framadate dans yunohost.
Mieux Voter
Il est possible d'importer un csv.
https://github.com/MieuxVoter/majority-judgment-web-app
exemples sous samples/mieuxvoter