Utilisateur:Romainbehar/Programmation

Un bot pourquoi faire ? modifier

Les bots font des modifications nombreuses et souvent ennuyeuses pour un humain, comme insérer des listes entières de mots dans le Wiktionnaire. Par exemple, l’article stocks partagés a été créé puis modifié automatiquement et uniquement par des bots, soit 30 modifications au total entre 2005 et 2017, avant que je vérifie le résultat et enlève le bandeau « Cette page a été créée automatiquement et nécessite une vérification »…

Il est possible de repérer plein d’erreurs et de faire des recherches poussées avec de petits programmes analysant les extractions de la base de données du Wiktionnaire (les dumps).

Une fois les modifications listées, si elle sont automatisables le bot pourra se charger de faire des milliers de modifications tout seul.

Par exemple, après avoir récupéré la liste des mot liés à la nourriture et la gastronomie depuis la page Wikipédia Liste d'idiotismes gastronomiques français, j’ai pu extraire presque deux mille expressions du Wiktionnaire contenant au moins un de ces mots. Après avoir filtré les faux positifs il en restait 460. J’ai enfin chargé GwynBot (d · c · b) de rajouter la catégorie Idiotismes gastronomiques en français dans toutes les définitions qui ne la contenaient pas encore. Résultat : la catégorie est passée de 64 éléments à 458.

Technique modifier

Les extractions modifier

Le dernier dump au format XML compressé est téléchargeable ici : dumps.wikimedia.org/frwiktionary/latest/, sous le nom de fichier frwiktionary-latest-pages-articles.xml.bz2. Quelques explications sur les dumps.

Langage utilisé modifier

Le langage Perl est le plus adapté pour l’étude de textes. Une bibliothèque écrite pour ce langage propose des outils optimisés facilitant l’analyse des dumps Wikipédia : MediaWiki::DumpFile::FastPages (et marche tout aussi bien pour le Wiktionnaire).

Applications modifier

Programme générique pour l’analyse détaillée des articles en langue française modifier

#!/usr/bin/perl -w

# parcourir tous les articles du Wiktionnaire et récupérer le wikicode de la partie française

use strict;
use utf8;
binmode STDOUT, ":utf8";

use MediaWiki::DumpFile::FastPages;

my $pages = MediaWiki::DumpFile::FastPages->new('frwiktionary-latest-pages-articles.xml');
my $titre;
my $texte;
while (($titre, $texte) = $pages->next) {

	analysePage($titre, $texte);
}



sub analysePage {
	my ($titre, $texte) = @_;

	# stockage des lignes de la partie française
	my @fr = ();

	# tant qu'on est au début de la page (pas de section encore rencontrée)
	my $debut = 1;

	# langue de la section courante
	my $langue = '';

	my @lignes  = split /\n/, $texte;
	for my $ligne (@lignes) {
		if ($ligne =~ /^\s*$/) {
			# on ne garde pas les lignes vides
			next;
		}
		if ($ligne =~ /^\[\[\w+:\w+/) {
			# on ne garde pas les liens interlangue, ni les catégories
			next;
		}
		if ($ligne =~ /^\s*\{\{voir/) {
			# on ne garde pas les références {{voir|}}
			next;
		}

		if ($ligne =~ /^\s*=/) {
			# première section, on marque le début de la page
			$debut = 0;

			# stockage du code langue chaque fois qu’on rencontre une tête de section
			if ($ligne =~ /^\s*==\s*\{\{\s*langue\s*\|\s*(\w*)/) {
				$langue = $1;
				next;
			}

		}

		# on stocke toutes les lignes de la section 'fr'
		if ($langue eq 'fr') {
			push @fr, $ligne;
		}
	}

	analyseFrancais(@fr);
}



sub analyseFrancais {
	my (@article) = @_;

	# simple affichage des lignes de la setion française
	for my $c (@article) {
		print $c, "\n";
	}
}