Améliorer l'usage des tags

a marqué ce sujet comme résolu.

L'idée du script est surtout de faire les 90% des cas chiants, les autres seront donc plus simples à la main.

Maintenant si quelqu'un est capable de fournir la table de correspondance des identifiants. On pourra déjà sortir (via un script similaire) la liste des changements de manière textuelle (que l'on posterai sur ce topic), de manière à être sur qu'il n'y a pas d'erreur, puis le script pourra être joué pour réparé une bonne partie des soucis.

Je t’assure que les deux cas dont je parle font partie des 90 % chiants, et qu’il reste des cas plus tricky à gérer à la main. :) Genre toutes les histoires d’accents et de circonflexe, y’en a un peu partout. Ou bien quand les gens ont utilisé une abréviation, mais que personne n’a encore utilisé la forme pleine.

Je ne suis pas sûr de comprendre. Qu’est-ce que tu voudrais qu’on te sorte exactement ? Une liste complète des changements à apporter, c’est le tuto, auquel comme j’ai dit, on donne accès à n’importe qui est un minimum de confiance.

Une sous-liste des changements automatisables, ça prendra un peu plus de temps, mais c’est faisable aussi. Faut juste me dire dans quel format tu la veux.

+0 -0

Je pense que firm1 veut qu'on fasse une table exploitable par le script. Par exemple, on pourrait sortir un fichier CSV contenant des choses de la forme ancientag,nouveautag. Ensuite, on pourrait lire ce fichier dans un dictionnaire. Après ça, il faudrait initialiser un tableau d'identifiants de tags pour faire les correspondances à partir du dictionnaire précédent.

Comme il va falloir se mettre d'accord sur chaque correspondance, une approche pourrait être d'exporter la source Markdown du tuto, faire de la magie noire (i.e awk et consorts) pour en faire un truc CSV-oïde , mettre tout ça sur un dépôt Git appartenant à l'organisation ZdS, puis procéder par PR pour faire le CSV final en discutant et en votant dans chaque PR. Dans le même dépôt on laisserait le script, qu'on modifierait légèrement pour lire le CSV. Et enfin, il restera un test sur une bêta à faire puis à lancer le script sur le serveur.

Je ne suis pas sûr de comprendre.

Dominus Carnufex

Je prend un exemple tiré de votre tri.

amélioration → (10) suggestion
améliorations → (10) suggestion
améliotation → (10) suggestion

La correspondance équivalente serait (je survole les lien à la souris pour avoir les id):

1
2
3
mapping["1549"] = "6"
mapping["275"] = "6"
mapping["108"] = "6"

EDIT : Un fichier csv aussi comme proposé fonctionne aussi du moment qu'on ait que les id dedans.

EDIT 2 : l'idée étant que ce soit simple, pas besoin de s'emmerder avec un dépot git et tout le tintouin. la table de correspondance sous forme de code python ou de csv devrait suffire.

Je préfère quand même avoir un CSV lisible par humain et un peu de code pour passer aux id parce que comme ça on peut relire facilement le fichier CSV au lieu de se dire "merde c'est quoi l'id 5265655 ?".

Grimur

si ça ne vous dérange pas trop, effectivement. C'est juste qu'il ne faut pas que ce soit finalement plus lourd que la solution "à la main"

EDIT : OK, c’est en cours.

Ouais, je suis en train de bidouiller avec Perl pour faire un truc de ce genre. Après, je suis pas vraiment pour une discussion à bâtons rompus sur l’ensemble du truc. Même en limitant à ce qui peut être automatisé, y’en a pour au moins 1000 tags, j’ai vraiment pas envie que ça vire au débat « à la ZdS ».

On a fait des choix de notre côté qui se veulent pragmatiques, mais dont l’explication ne sera pas visible dans une bête liste de changements automatisés, et on s’est montrés prudents pour ne pas être trop sectaires.

Ce que je crains sincèrement, c’est qu’on se retrouve avec des gens comme Riccocotam (rien de personnel, c’est juste tombé sur toi cette fois) qui n’ont pas lu tout ce qui s’est fait avant et qui viennent dire « ah mais non, tel tag, là, ça va pas ». Ce qui arrive régulièrement dans les débats ici et fait toujours perdre beaucoup de temps.

+3 -0

On va déjà avancer sur les cas qui ne posent pas problèmes. S'il y a vraiment des cas problématiques, on va tout de même écouter le monde et le staff tranchera au pire. On ne peut pas juste décider de faire passer en force quelque chose parce qu'on y croit dur comme fer.

Merci d'avance en tout cas pour le boulot abattu jusqu'ici. C'est énorme.

Pour donner un ordre d’idée, et recentrer si besoin, voici ce qui est automatisable pour le cas 5 (orthographe fautive).

J’y ai intégré les cas où le tag de destination n’existe pas encore, parce que ça représente bien la moitié des cas ici. Si tu veux que ça prenne une autre forme, n’hésite pas à demander.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
mapping["458"] = "368" # accepté → acceptée
mapping["1495"] = "accueil" # acceuil → accueil
mapping["838"] = "87" # adroid → android
mapping["1101"] = "437" # aglo → algorithme
mapping["703"] = "646" # algorithmie → algorithmique
mapping["1587"] = "437" # algorythme → algorithme
mapping["2109"] = "1505" # architechture → architecture
mapping["1493"] = "1871" # bonne pratiques → bonnes pratiques
mapping["620"] = "ccleaner" # ccleander → ccleaner
mapping["1353"] = "chiralité" # chiraité → chiralité
mapping["1728"] = "1141" # code::block → code::blocks
mapping["1292"] = "694" # convertion → conversion
mapping["502"] = "debian 7" # débian 7 → debian 7
mapping["1874"] = "décodeur BCD" # decodeur bcd → décodeur BCD
mapping["380"] = "défi" # defi → défi
mapping["1305"] = "électronique" # electonique → électronique
mapping["363"] = "électrocinétique" # electrocinétique → électrocinétique
mapping["162"] = "électronique" # electronique → électronique
mapping["1242"] = "électronique" # eletronique → électronique
mapping["418"] = "étymologie" # ethymologie → étymologie
mapping["173"] = "études" # etudes → études
mapping["772"] = "explorer" # exlorer → explorer
mapping["1673"] = "google traduction" # google-translate → google traduction
mapping["1615"] = "541" # gtk → gtk+
mapping["432"] = "hébergement" # hebergement → hébergement
mapping["1857"] = "377" # idea → ide
mapping["1621"] = "1663" # javae → java ee
mapping["1748"] = "81" # javascrip → javascript
mapping["970"] = "1663" # jee → java ee
mapping["1133"] = "jeu vidéo" # jeu-vidéo → jeu vidéo
mapping["93"] = "jeu vidéo" # jeu video → jeu vidéo
mapping["1475"] = "100" # linx → linux
mapping["570"] = "1363" # machine virtuel → machine vituelle
mapping["781"] = "789" # mails → mail
mapping["284"] = "24" # math → maths
mapping["1724"] = "maths sup" # math sup → maths sup
mapping["207"] = "24" # mathematique → maths
mapping["1371"] = "608" # matploplib → matplotlib
mapping["668"] = "modélisation" # modelisation → modélisation
mapping["2060"] = "modélisme" # modelisme → modélisme
mapping["806"] = "429" # mysq → mysql
mapping["334"] = "1291" # nodejs → node.js
mapping["1286"] = "1092" # open-source → open source
mapping["281"] = "1852" # oxs → os x
mapping["591"] = "pair à pair" # pair-à-pair → pair à pair
mapping["1396"] = "1440" # parcour → parcours
mapping["1816"] = "polymorphisme" # polymorphie → polymorphisme
mapping["383"] = "réglementation" # reglementation → réglementation
mapping["590"] = "79" # résaux → réseau
mapping["35"] = "sécurité" # securité → sécurité
mapping["1044"] = "6" # sugestion → suggestion
mapping["153"] = "suite logicielle" # suite de logiciel → suite logicielle
mapping["1552"] = "témoignage" # temoignage → témoignage
mapping["21"] = "thème" # theme → thème
mapping["188"] = "traitement du signal" # traitement de signal → traitement du signal
mapping["2084"] = "199" # ubunru → ubuntu
mapping["601"] = "1779" # versionning → versioning
mapping["1605"] = "1735" # workfow → workflow

+1 -0

Alors oui et non. D’une part, un certain nombre de ces changements ont une valeur contextuelle : c’est dans le cadre des sujets utilisant actuellement ce tag qu’on prend cette décision.

Ça concerne notamment beaucoup de cas 9 (suppression du tag, mais si quelqu’un crée un sujet où ce tag est utilisé à bon escient, banco) et de cas 12 (gestion des numéros de version).

D’autre part, nous ne sommes pas infaillibles, et il se peut que nous n’ayons pas pensé à une utilisation alternative du tag. Ou qu’on y ait pensé, mais qu’elle n’existe pas pour l’instant. Par exemple, cnc va être redirigé vers usinage CNC parce que le sujet qui l’utilise parle de ça, mais il pourrait y avoir un sujet sur le Centre National du Cinéma.

Mais oui, j’avais dans l’idée d’avoir quelque part une liste de redirections fortement suggérées, en particulier pour les cas 6 à 8.

+1 -0

Bon, firm1, j’ai fait le tour complet, en enlevant les tags qui posent encore problème, et ceux qui consistent à fusionner deux tags ou à en séparer deux (on le fera à la main). Il est apparu deux choses.

  • Même si on s’est efforcés de limiter les cas, certaines modifications sont « transitives », c’est-à-dire qu’un tag va être fusionné dans un autre, qui doit lui-même être fusionné dans un troisième. Il faudra sans doute faire plusieurs passes du script pour tous les ramasser. (Je pense que 2 suffiront, mais autant être sûrs.)
  • Afin de maximiser l’efficacité, il faudrait sans doute mettre les modifications qui impliquent la création d’un nouveau tag1 tout à la fin. J’attends d’ailleurs toujours que tu me dises sous quelle forme tu les veux, ceux-là.

Si toutes ces modifs sont faites automatiquement, et qu’on y ajoute les tags qui ne bougent pas, ça laisse environ 150 tags à traiter à la main, dont 100 qui rentrent dans les cas 1 et 2 (fusion et séparation). Le reste, ce sont les cas « difficiles ».


  1. Je précise, parce que ce n’est pas forcément très clair : dans la plupart des cas, il s’agirait de renommer dans la base de données un tag existant. Dans quelques rares cas, plusieurs tags doivent être fusionnés dans le même tag non encore existant. Ce cas-là est un peu plus tricky, mais je peux faire une liste complète. 

+0 -0

Le fait qu'il y est 1900 tags ou 30 ne change rien. Si quand tu saisis tes tags tu as les suggestions passé 3 caractères (par exemple) qui se précise ça ne change vraiment rien. Le gros avantage c'est qu'il n'y a qu'un seul type d'intervention qui se tassera avec le temps, ce sont les nouveaux tags. Je ne parle pas d'une liste parmis laquelle on choisit, comme on a pour la création d'article et de tuto, ce serait nulle pour les utilisateurs, je parle bien d'un truc comme pour le choix de ton pays.

Ricocotam

Oui mais si tu tapes workspace par exemple, ça ne va pas compléter automatiquement pour espace de travail. Donc à moins de connaître les 2000 tags, tu es bloqué.

entwanne

Pas forcément. Déjà le moteur de recherche peut être plus intelligent qu'une simple reconnaissance de caractère. Ensuite, pour les tags déjà mappés (typiquement workspace et espace de travail) peuvent être modifiés lors de la requête de post. Il suffit de prévenir les utilisateurs avant pour pas qu'ils soient pas content et puis voilà. D'ailleurs, c'est quelque chose qui peut être codé avant la séparation titre/tag je pense.

@Dominus : J'ai cru au début que tu m'accusais d'avoir dit ça alors que pas du tout xD. Pas de soucis, ça fait toujours plaisir d'être cité :D

J’attends d’ailleurs toujours que tu me dises sous quelle forme tu les veux, ceux-là.

Dominus Carnufex

Pour ce qui est de la création des tags, ça ne sera pas pour tout de suite :-° ça complexifie un poil mon script. J'ai pris un peu de temps pour tester l'ébauche de script que je t'ai fourni en cet apres-midi, le résultat est disponible ici. Il est sale oui, mais il est fonctionnel pour un one shot. Maintenant j'attends que quelqu'un avec les accès ssh ait le temps de le lancer en beta.

Voilà ce qui devrait donc changer :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'architechture' --> 'architecture'
'ubunru' --> 'ubuntu'
'math' --> 'maths'
'gtk' --> 'gtk+'
'mathematique' --> 'maths'
'gtk' --> 'gtk+'
'idea' --> 'ide'
'math' --> 'maths'
'math' --> 'maths'
'math' --> 'maths'
'nodejs' --> 'node.js'
'nodejs' --> 'node.js'
'javascrip' --> 'javascript'
'gtk' --> 'gtk+'
'math' --> 'maths'
'code::block' --> 'code::blocks'
'nodejs' --> 'node.js'
'nodejs' --> 'node.js'
'math' --> 'maths'
'nodejs' --> 'node.js'
'javae' --> 'java ee'
'gtk' --> 'gtk+'
'workfow' --> 'workflow'
'math' --> 'maths'
'nodejs' --> 'node.js'
'math' --> 'maths'
'math' --> 'maths'
'algorythme' --> 'algorithme'
'math' --> 'maths'
'mathematique' --> 'maths'
'math' --> 'maths'
'nodejs' --> 'node.js'
'math' --> 'maths'
'sugestion' --> 'suggestion'
'bonne pratiques' --> 'bonnes pratiques'
'linx' --> 'linux'
'sugestion' --> 'suggestion'
'parcour' --> 'parcours'
'math' --> 'maths'
'matploplib' --> 'matplotlib'
'convertion' --> 'conversion'
'math' --> 'maths'
'open-source' --> 'open source'
'math' --> 'maths'
'sugestion' --> 'suggestion'
'jee' --> 'java ee'
'aglo' --> 'algorithme'
'math' --> 'maths'
'adroid' --> 'android'
'mysq' --> 'mysql'
'mails' --> 'mail'
'nodejs' --> 'node.js'
'algorithmie' --> 'algorithmique'
'math' --> 'maths'
'versionning' --> 'versioning'
'résaux' --> 'réseau'
'machine virtuel' --> 'machine vituelle'
'versionning' --> 'versioning'
'nodejs' --> 'node.js'
'oxs' --> 'os x'
'accepté' --> 'acceptée'
Nombre de sujets modifiés : 61

Un total de 61 topic qui seront modifiés. Pas beaucoup finalement :(

Pour la transitivité, ça aurait été plus cool d'avoir directement le tag final non ? si A -> B et B -> C , alors A -> C était suffisant pour appliquer la transition.

Pour ce qui est de la « création de tag », comme je le dis plus haut, il s’agit seulement de renommer des tags existants, en fait. Du coup, est-ce qu’il y a une fonction prévue pour modifier le tag.title que tu utilises dans ton code et que la modification soit enregistrée ?

Pour la transitivité, j’ai fait un nouveau script, et j’ai trouvé et modifié les quelques cas existants, il n’y a plus de problème.

EDIT : c’est parce que tu n’as encore que la section 5. La liste contenant toutes les modifications à faire sauf les renommages de tag (cf. premier paragraphe) fait plus de 800 lignes. ^^

+0 -0

Pour ce qui est de la « création de tag », comme je le dis plus haut, il s’agit seulement de renommer des tags existants, en fait. Du coup, est-ce qu’il y a une fonction prévue pour modifier le tag.title que tu utilises dans ton code et que la modification soit enregistrée ?

Ah je n'avais pas compris que c'était juste du renommage de tag. Dans ce cas c'est jouable, je vais modifier le script en conséquence.

Pour la transitivité, j’ai fait un nouveau script, et j’ai trouvé et modifié les quelques cas existants, il n’y a plus de problème.

EDIT : c’est parce que tu n’as encore que la section 5. La liste contenant toutes les modifications à faire sauf les renommages de tag (cf. premier paragraphe) fait plus de 800 lignes. ^^

Dominus Carnufex

Je ne suis pas sur d'avoir compris. Du coup tu as encore des correspondance à me passer ?

Dans ce cas c'est jouable, je vais modifier le script en conséquence.

Et du coup, dis-moi sous quelle forme tu veux que je te fournisse la liste de tags à renommer et leur nouveau nom.

Je ne suis pas sur d'avoir compris. Du coup tu as encore des correspondance à me passer ?

Évidemment ! Tu ne t’imaginais tout de même pas que l’ensemble des modifications automatisables se limitaient à une cinquantaine de tags ?! Ce que tu as là, ce sont les tags ayant une faute d’orthographe manifeste (section 5 de ce descriptif). Je te l’ai filé en guise d’aperçu, parce que le fichier complet fait plus de 800 lignes, et que ça aurait été un peu raide à poster sur le forum et surtout à corriger après coup…

+0 -0

Dans ce cas c'est jouable, je vais modifier le script en conséquence.

Et du coup, dis-moi sous quelle forme tu veux que je te fournisse la liste de tags à renommer et leur nouveau nom.

Dominus Carnufex

Sous la même forme que dans ton précédent message. C'est à dire (en python) une liste telle que :

1
2
3
tags_a_renommer["1495"] = "accueil" # acceuil → accueil
tags_a_renommer["1816"] = "polymorphisme" # polymorphie → polymorphisme
#...

En sachant que d'un coté tu dois m'avoir filé la liste des tags qui bougent sous la forme :

1
2
3
4
mapping["838"] = "87" # adroid → android
mapping["1101"] = "437" # aglo → algorithme
mapping["703"] = "646" # algorithmie → algorithmique
#... 

Un petit gist avec tout ça, et ça devrait le faire.

PS : désolé Andr0, je suis en train de squatter ton topic avec tout ça. Si tu veux qu'on fasse ça ailleurs préviens moi.

Je crois que j'ai trouvé un conflit mais j'avoue je suis pas sûr puisque l'indice du tableau est le même. Enfin la description porte à confusion ^^

1
2
3
934 : mapping["545"] = "27" # amv → musique
[...]
957 : tags_a_renommer["545"] = "anime" # amv → anime
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte