arthur.bebou

Le site arthur.bebou.netlib.re - retour accueil

git clone git://bebou.netlib.re/arthur.bebou

Log | Files | Refs |

index.sh (8638B)


      1 #! page
      2 title: Comment j\'ai volé le DES au CRISCO
      3 author: Arthur Pons
      4 description: Argent publique = Recherche publique, libérons le contenu du dictionnaire électronique des synonymes de sa cage webeuse
      5 publication: 2024-05-24
      6 
      7 sectionmd: main
      8 
      9 Cet article a été partiellement réécrit suite aux demandes des participant·es
     10 de PPPiraterie s'étant tenu à Cesure début avril 2025. Merci pour votre
     11 enthousiasme !
     12 
     13 ## Les données et l'outil pour les parcourir
     14 
     15 [La base de données du DES en json - 6Mo](des.json.gz)\
     16 [Un TSV du top 10 des synonymes pour chaque mot - 4Mo](data)\
     17 [L'outil pour parcourir les données](http://git.bebou.netlib.re/des/log.html)
     18 
     19 ## Est-ce que c'est légale ?
     20 
     21 Sur la [page d'accueil] on retrouve ce texte :
     22 
     23 > Constitué à partir de données – mots et liens – extraites de dictionnaires et
     24 > des recherches de l’ELSAP, laboratoire associé au CNRS, puis du CRISCO, le DÉS
     25 > constitue dans sa forme actuelle une œuvre originale, propriété de
     26 > l’université de Caen Normandie. La consultation du DÉS et la reproduction de
     27 > ses pages sont libres, mais la base de données reste la propriété exclusive de
     28 > l’université. L’utilisation de copies de cette base de données ne peut se
     29 > faire que sous contrat de licence avec l’université. En conséquence, toute
     30 > requête automatique visant à collecter les données du DÉS est strictement
     31 > interdite.
     32 
     33 Ce qui va suivre dans cet article pourrait être illégal 😲
     34 
     35 Pourtant le CRISCO est financé par de l'argent publique et rend déjà accessible
     36 la totalité des données du DES via son interface web. De plus le ministère de
     37 l'enseignement supérieur et de la recherche dispose d'un [Plan national pour la
     38 science ouverte] qui stipule à plusieurs reprises qu'il faudrait ouvrir autant
     39 que possible les données de la recherche. En réalité le DES est déjà remarquable
     40 en cela qu'il rend tout accessible via au moins une interface, même si ce n'est
     41 pas celle que je préfère, communique bien sur les statistiques d'utilisation du
     42 service, la vie du projet et permet même à n'importe qui de proposer des
     43 modifications.  Compte tenu des efforts déjà consentis par le CRISCO, j'ai du
     44 mal à comprendre pourquoi tracer une ligne rouge aux requêtes automatiques[^1].
     45 Je vais donc, l'esprit tranquille, procéder à utiliser une copie de cette base
     46 de donnée sans contrat de licence. Et sans faire de requête automatique.
     47 
     48 Par ailleurs la question se pose de savoir ce qu'est une requête une automatique
     49 et comment le CRISCO pourrait les détecter. On comprend bien qu'une requête via
     50 l'utilisation de leur interface web est autorisée, on comprend bien que l'esprit
     51 du texte est d'interdire un script qui scrapperait toute la bdd mais quid d'une
     52 requête `curl` individuelle, formée à la main au moment même du besoin ?
     53 
     54 Qui y'a-t-il de plus automatique dans le faite d'avoir un script comme celui-ci
     55 
     56 	mot="$1"
     57 	curl -Ls "https://crisco4.unicaen.fr/des/synonymes/$1" |
     58 		grep -E "height:8px" | grep -Eo '/des/synonymes/[^"]+' |
     59 		cut -d'/' -f4 | tr '+' ' '
     60 
     61 executé en écrivant `des manger` que dans le fait de faire construire la bonne
     62 requête à firefox en écrivant dans une balise `input` et en cliquant sur le
     63 bouton. C'est à mon sens strictement équivalent et l'on peut d'ailleurs trouver
     64 des équivalences : l'argument passé à la commande est la balise `input` et son
     65 contenu, l'appel à `curl` est le moteur de requête de firefox, le reste du code
     66 est le moteur de rendu de firefox.
     67 
     68 Je pense donc que les mentions légales du CRISCO devraient insister sur
     69 l'interdiction de récupérer la totalité de la base sans faire de distinction
     70 basée sur la manière de requêter leur base. Sauf qu'il est précisé que la
     71 reproduction des pages est permise ce qui implique que si l'on partage nos
     72 requêtes nous pourrions peu à peu reformer la totalité de la base de donnée
     73 sans pour autant l'aspirer dans sa totalité à l'échelle individuelle. C'est
     74 compliqué tout ça.
     75 
     76 ## Comment j'ai collecter les données
     77 
     78 Je pense que la première et bonne façon de faire aurait été d'envoyer un
     79 mail à l'équipe de recherche expliquant le besoin. Il est assez probable que
     80 l'équipe réponde favorablement. Cela dit j'avais à cœur de vérifier si c'était
     81 possible autrement, via un bête lien quelque part dans la documentation.
     82 
     83 En l'occurrence je ne suis pas parvenu à trouver ce que je voulais ni sur la
     84 [page d'accueil] ni [la page de présentation] ni [la page du dictionnaire
     85 elle-même].  Je n'ai peut-être pas les yeux en face des trous.
     86 
     87 Je suis toujours un peu tiraillé entre deux sentiments dans ce genre de cas.
     88 D'un côté je ne suis plus surpris de voir encore un service, une donnée, rendue
     89 d'abord via une interface web avant même de se soucier si la donnée est
     90 accessible sous sa forme initiale et de l'autre je suis toujours surpris de voir
     91 que même le monde universitaire tombe dans ce travers. On me permet de partager
     92 la page web dans linkedin mais pas de télécharger la base de donnée.
     93 
     94 ### La version autonome
     95 
     96 Heureusement il existe une version dîtes "autonome" disponible [ici]. Qui dit
     97 pas de connexion internet dit toutes les données en locale. Il devrait donc
     98 exister un fichier contenant ce qu'il nous faut. On télécharge 54Mo de données
     99 zippées, 207Mo décompressés :
    100 
    101     $ curl -Ls https://crisco4.unicaen.fr/des/a_DES.zip > des.zip
    102     $ unzip des.zip
    103     $ du -hs des
    104     207Mo
    105 
    106 Pour explorer le contenu du dossier on fait ensuite un grep un peu massif là
    107 dedans et on le pipe dans fzy dont la sortie sera ouverte dans vim :
    108 
    109     grep -rnIH |
    110         fzy -l 100 |
    111         cut -d':' -f-2 | sed 's/:/ +/' |
    112         xargs -or vim
    113 
    114 Si vous êtes sur un ordi pas très puissant ça n'est probablement pas l'idée du
    115 siècle mais passons. En cherchant un mot comme "machin" je trouve des
    116 occurrences intéressantes dans le fichier `sortieDES.txt`, on le sélectionne
    117 pour l'ouvrir.  Effectivement on y trouve un gros objet json du type :
    118 
    119     {
    120     mot : {
    121     synonymes: [
    122     1,
    123     2,
    124     ...],
    125     liste10: [
    126     1,
    127     chiffre,
    128     2,
    129     chiffre2,
    130     ...];
    131 
    132 Nous avons trouvé notre base de donnée ! Le fichier fait 36Mo en tout. Si vous
    133 le voulez sans avoir à télécharger l'application java en entier je propose une
    134 [version compressée](des.json.gz) que vous pouvez décompresser avec `gunzip
    135 des.json.gz`.
    136 
    137 ### TSViser le fichier
    138 
    139 [J'aime bien le TSV](/amourtsv/) et en réalité ne suis qu'intéressé par la
    140 "liste10", c'est à dire le top 10 des synonymes les plus "proches". J'ai
    141 donc créé un format TSV un peu moche pour contenir ces infos :
    142 
    143     cat sortieDES.txt | jq 'keys_unsorted' | sed '1 d;$ d' > mots
    144     cat sortieDES.txt | jq '.[].liste10|join(";")' > synonymes
    145     paste mots synonymes | tr -d '",' | sed -E 's/([0-9]);([^0-9])/\1\t\2/'g > data
    146 
    147 Je suppose que l'on peut faire ça avec une seule commande jq mais j'y comprends
    148 pas grand chose. Au final `data` ressemble à :
    149 
    150     abaisse-langue	spatule;50
    151     abaissement	baisse;41	dégénérescence;31	décadence;31	déclin;29	avilissement;28	diminution;26	dégradation;26	déchéance;22	dépréciation;22	affaiblissement;19	détérioration;14	affaissement;14	rabaissement;14	honte;11	bassesse;11	indignité;10
    152     abaisser	rabaisser;49	avilir;41	déprécier;23	humilier;23	baisser;20	dégrader;20	diminuer;17	flétrir;15	ravaler;14	réduire;13	courber;13	abâtardir;11	salir;11	rabattre;11	rapetisser;9	affaiblir;9
    153     abajoue	bajoue;200	joue;40
    154 
    155 C'est un format qu'on peut requêter avec par exemple :
    156 
    157     $ grep "^manger\t" data | cut -f2- | tr ';\t' '\t\n'
    158     bouffer	20
    159     dévorer	19
    160     engloutir	14
    161     avaler	14
    162     croquer	13
    163     consumer	13
    164     s'empiffrer	11
    165     dépenser	11
    166     absorber	10
    167     dissiper	9
    168     user	9
    169     ronger	8
    170     se gaver	8
    171     engouffrer	8
    172     dilapider	8
    173     se gorger	8
    174 
    175 Ce format est disponible [ici](data).
    176 
    177 [page d'accueil]: https://crisco.unicaen.fr/dictionnaire-electronique-des-synonymes-des/
    178 [la page de présentation]: https://crisco.unicaen.fr/dictionnaire-electronique-des-synonymes-des/presentation-du-dictionnaire-electronique-des-synonymes/
    179 [la page du dictionnaire elle-même]: https://crisco4.unicaen.fr/des/
    180 [Plan national pour la science ouverte]: https://www.enseignementsup-recherche.gouv.fr/fr/le-plan-national-pour-la-science-ouverte-2021-2024-vers-une-generalisation-de-la-science-ouverte-en-48525
    181 [^1]: contre lesquelles rien n'est fait par ailleurs
    182 [ici]: https://crisco.unicaen.fr/dictionnaire-electronique-des-synonymes-des/version-autonome-du-dictionnaire-electronique-des-synonymes/
    183 
    184 endsection