Utilisateur:Romainbehar/Programmation : anagrammes

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

Liste des anagrammes en français[modifier le wikicode]

Résultat (décembre 2016) :

Le programme peut facilement être modifié pour analyser une autre langue.

Programme[modifier le wikicode]

#!/usr/bin/perl -w

# trouver les anagrammes des mots français

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

use MediaWiki::DumpFile::FastPages;
use Text::Unidecode;

my %anagrammes = ();

my $pages = MediaWiki::DumpFile::FastPages->new('frwiktionary-latest-pages-articles.xml');
my $titre;
my $texte;
while (($titre, $texte) = $pages->next) {
	# uniquement les pages qui ont une section {{langue|fr}}
	if ($texte =~ /\{\{langue\|fr\}\}/m) {
		# lettres sans accents (transforme aussi par exemple 'œ' en 'oe')
		my $sansaccents = unidecode($titre);
		# suppression de tout ce qui n'est pas des lettres
		$sansaccents =~ s/\W//g;
		# si moins de 3 lettres, on passe
		if (length($sansaccents) < 4) {
			next;
		}
		# tri des lettres (ordre alphabétique, conserve les doublons)
		my $tri = (join '', sort { $a cmp $b } split(//, $sansaccents));

		# stockage dans un tableau pour regouper les titres qui ont les mêmes lettres
		if (!exists $anagrammes{$tri}) {
			$anagrammes{$tri} = [];
		}
		push $anagrammes{$tri}, $titre;
	}
}

# affichage des groupes qui ont au moins deux mots
for my $a (keys %anagrammes) {
	my $total = scalar @{ $anagrammes{$a} };
	if($total < 2) {
		# si pour cette liste de lettres il n’y a qu’un seul mot, on passe
		next;
	}

	print "$total anagrammes avec les lettres $a :\n   ";
	for my $m (@{ $anagrammes{$a} }) {
		print $m, ",";
	}
	print "\n";
}