27 janvier 2008

Danger : accidents mortels !

Je ne connais pas du tout la blogosphère américaine (d'ailleurs, commencer à publier en anglais est aussi un moyen, j'espère, d'en récupérer quelques échos) mais il y a un blog anglophone que je visite régulièrement, xkcd, recueil de vignettes de BD tordantes... pour un public plutôt initié (comprenez : aussi geek que son auteur Randall Munroe, à l'origine d'autres jolis coups).

J'ai particulièrement apprécié une des dernières vignettes, qui fait appel aux nombres de résultats Google, comme ça m'est déjà arrivé sur ce blog pour l'orthographe, la célébrité des députés, ou la date de naissance du web :

Activités dangereuses
Indexées par le nombre de résultats Google pour
"mort dans un accident de ..."

Type d'accident - Résultats Google
parachutisme - 710
ascenseur - 575
surf - 496
skateboard - 473
camping - 166
jardinage - 100
patinage - 94
couture - 7
blogage - 2

Cette vignette a créé une Google Bomb slashdottée en faisant exploser le nombre de réponses pour "died in a blogging accident". L'expression avait bien sûr marqué les esprits de tous les blogueurs, qui ont repris la vignette en ajoutant les résultats de leurs propres recherches Google sur le sujet. On peut voir sur ce site ou dans le forum xkcd de nombreuses tentatives pour trouver la perle rare de l'activité dangereuse originale.

Sauf que la langue anglaise a un avantage sur le français : elle exprime ses noms d'activités par des verbes au participe présent. Là vous commencez à voir où je veux en venir, et si on envoyait carrément à Google tous les verbes anglais, pour qu'il nous dise lequel est le plus accidentogène ? Comment le faire techniquement ?

Première étape, récupérer une liste de tous les verbes anglais. Pas évident, comme en témoignent cette question Google Answers pleine de liens morts, ou ces 5 pages de réponses inutiles ou périmées de forumeurs... Bref, je me suis résolu à faire confiance à mon moteur de recherche préféré, en lui envoyant une liste de tous les verbes qui me sont passés par la tête. Manque de chance, elle renvoyait naturellement des dictionnaires complets, j'interdis donc d'un nom commun, hat, et en troisième page pour -hat strike give abandon wipe rub search seek hang eat adjust draw conclude reappear reconsolidate create destroy dream cut put drive, j'arrive enfin à une page du projet VerbNet qui présente plus de 3500 fichiers nommés par des verbes, plus quelques intrus. Même si on peut faire mieux, je m'en suis contenté...

Deuxième étape, générer les participes présents. Verbe + ing ? Oui mais il y a quelques subtilités, en fonction des dernières lettres de l'infinitif ! Heureusement que mon logiciel de tableur préféré me permet de coder quelques bouts de programmes, voilà la formule magique pour le "calcul" des participes présents (histoire de ne pas me perdre dans les parenthèses, je l'ai séparée en plusieurs cellules dans mon fichier tableur, mais pour le fun je la mets en un seul morceau) :
B1=IF(RIGHT(A1;1)="e";=IF(LEFT(RIGHT(A1;2);1)="i";CONCATENATE(LEFT(A1;LEN(A1)-2);"ying");CONCATENATE(LEFT(A1;LEN(A1)-1);"ing"));=IF(OR(RIGHT(A1;1)="d";RIGHT(A1;1)="g";RIGHT(A1;1)="m";RIGHT(A1;1)="n";RIGHT(A1;1)="p";RIGHT(A1;1)="t");=IF(OR(LEFT(RIGHT(A1;2);1)="a";LEFT(RIGHT(A1;2);1)="e";LEFT(RIGHT(A1;2);1)="i";LEFT(RIGHT(A1;2);1)="o";LEFT(RIGHT(A1;2);1)="u");=IF(OR(LEFT(RIGHT(A1;3);1)="a";LEFT(RIGHT(A1;3);1)="e";LEFT(RIGHT(A1;3);1)="i";LEFT(RIGHT(A1;3);1)="o";LEFT(RIGHT(A1;3);1)="u";AND(LEFT(RIGHT(A1;2);1)="e";RIGHT(A1;1)="n"));CONCATENATE(A1;"ing");CONCATENATE(A1;RIGHT(A1;1);"ing"));CONCATENATE(A1;"ing"));CONCATENATE(A1;"ing")))

Allez, une petite explication rapide. Si la dernière lettre est un "e", alors :
  • si l'avant-dernière est un "i", je transforme en "ying" (die -> dying)
  • sinon, je supprime le "e" et ajoute "ing" (love -> loving)
sinon :
  • si le verbe se termine par "en", j'ajoute simplement "ing" (sharpen -> sharpening)
  • sinon, si l'avant-dernière est un "d", "g", "m", "n", "p", "t", je vais la doubler si elle est précédée par une voyelle qui n'est pas précédée par une voyelle (bid -> bidding, put -> putting, mais claim -> claiming, feed -> feeding)
  • sinon, j'ajoute simplement "ing" (speak -> speaking)
J'ai créé ces règles intuitivement, en fait pour le doublement de la consonne finale, il faut vérifier si la dernière syllabe est accentuée, ma version a un très petit nombre d'exceptions, je n'ai identifié que des verbes se terminant par "on" (abandon -> abandoning, alors que con -> conning est correct).

Dernière étape, entourer chaque participe à gauche par "died in a (ou "died in an si le verbe commence par une voyelle) et à droite par accident", et envoyer chaque expression ainsi créée à Google, en utilisant FuryPopularity. J'en ai profité pour mettre le programme à jour, parce que Google a changé le style de ses résultats, et apparemment durci sa politique de détection de spam de requêtes : au bout de 200 requêtes envoyées toutes les 5 secondes, le moteur m'a empêché de continuer, et m'a débloqué seulement après captcha. En laissant une dizaine de secondes, ça passe. Je suis preneur de toute information sur leur algorithme de détection : se fonde-t-il seulement sur la fréquence (si oui, ils doivent identifier les proxys générateurs de nombreuses requêtes, non ?) ou sur la périodicité des requêtes, ou encore les actions effectuées suite aux requêtes ?

Voici le nuage brut de mots trouvés :
En analysant avec précaution ceux qui apparaissent moins fréquemment, on ne tombe malheureusement pas que sur des prétendants aux Darwin Awards. Tout d'abord, quelques parasites issus des réactions au dessin de xkcd, ou des décès d'animaux, mais aussi des choses plus gênantes : des adjectifs (amusing, embarrassing, interesting...) et des verbes n'indiquant pas une activité, mais plutôt des circonstances (exploding, crushing, choking...). Pour ces derniers, je n'ai pas de solution. On peut en revanche enlever les adjectifs verbaux assez facilement de façon automatique. Bien sûr, c'est possible en utilisant un analyseur syntaxique, voire un dictionnaire, mais je préfère rester dans l'utilisation des nombres de résultats Google.

J'ai fait plusieurs essais avant de trouver le critère discriminant. Comparer la fréquence de la forme participe présent par rapport à celle de l'infinitif (en espérant que ce soit plus élevé pour les adjectifs verbaux), ou trouver les pourcentages d'apparition du participe présent just après l'article "a", "more", ou "most". Dans le graphique ci-contre, les 5 premiers verbes donnent naissance à des adjectifs verbaux (amusant, effrayant, choquant, intéressant, dérangeant). On y voit que la stratégie du "a" ne fonctionne pas en particulier à cause des participes présents utilisés en anglais dans des mots composés : "a frying pan", une poële à frire, explique que "a frying" apparaisse si fréquemment. En revanche pas de contrexemple dans cette liste-test pour le superlatif avec "most" qui permet apparemment de faire la distinction (en fait la méthode laisse passer deux intrus : "ensuing" et "seeming" dans cette liste d'une centaine de verbes) :

Bref, une fois ce petit filtrage effectué, on peut regarder non seulement la fréquence de "died of a ... accident", mais aussi la comparer avec la fréquence de "a ... accident", ainsi que la popularité de l'activité elle-même, pour obtenir des sortes de taux d'accident (en bleu) et taux de mortalité (en rouge) :Et voilà ! Si votre activité favorite n'est pas dans la liste, vous avez au moins une base de comparaison pour tester sa dangerosité. Et si elle y est, faites attention à vous (surtout ceux qui ont prévu une petite joute équestre pour le weekend prochain...), mais ne vous inquiétez pas trop quand même, vous gardez aussi vos chances avec la bonne vieille tumeur ou la crise cardiaque !


This post is translated to English: Danger: deadly hobbies!
Et comme d'hab, les fichiers source : liste de plus de 3000 verbes anglais et la construction automatisée de leur participe présent, test des méthodes de détection des adjectifs verbaux, résultats des requête Google.

4 commentaires:

lasandale a dit…

Je meurs dans un accident de... rire.
Vous allez pouvoir analyser maintenant la dispersion temporelle des entrées sur ce blog suite au lien posté par Versac.
J'aime beaucoup votre travail très complémentaire de celui de Veronis.

Anonyme a dit…

Je crois qu'XKCD a ce genre d'effets sur la plupart des geeks.

Faudrait un avertissement sur son site.

Neil a dit…

You are a prick for doing this, and ruining the fun of everyone else.

FreeCorp a dit…

Neil, your lack of imagination is so disappointing: what about verbs that I didn't try (invented recently for example), verbal expressions ("died in an ice skating accident"), adding an object or adjective to the verb ("died in a silly criticizing accident") or just using a noun instead of a verb ("died in a car accident")?

And I did think of those who still want to play (and have enough imagination) by citing this link in my post.