L’objectif de cette page projet est de voir comment utiliser au mieux les outils existants pour faire des requêtes dans le Wiktionnaire, donner des suggestions d’amélioration ou indiquer les recherches intéressantes que l’on a construites avec ces outils. Cela dans une perspective de contribution et de vérification du contenu du Wiktionnaire d’une part, mais également de sortie de données pour d’autres usages ou de visualisation de données.
Cinq voies sont aujourd’hui ouvertes :
Accessible depuis la page Wiktionnaire:Recherche avancée dont un lien est inclus dans la colonne latérale, il fonctionne aussi en externe. Il est développé par Darkdadaah et s’appuie sur les copies de sauvegarde mensuelles, les dumps, pour en extraire les formes des mots, les classes de mots et les indications de prononciation. Il propose une copie de la base au format SQL.
Cet outil permet de rechercher des anagrammes, des rimes ou bien des mots à partir d’une prononciation. Si vous utilisez cet outil pour contribuer, n’hésitez pas à détailler comment !
Le logiciel AutoWikiBrowser, ou AWB, est un outil qui permet de modifier massivement les pages du Wiktionnaire. Une page de doc spécifique existe, Wiktionnaire:AutoWikiBrowser, mais elle est sommaire pour l’instant. Dommage, car l’outil permet de faire des requêtes à partir d’expressions régulières intéressantes grâce à son outil « Database Scanner ».
On peut les récupérer en .xml.
N’hésitez pas à lister des requêtes faites grâce à cet outil !
mw.loader.load('//en.wikipedia.orghttps://fr.wiktionary.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&action=raw&ctype=text/javascript');
N’hésitez pas à lister des requêtes faites grâce à cet outil !
PetScan permet de faire des requêtes dans le Wiktionnaire en cherchant toutes les pages qui se trouvent dans une ou plusieurs catégories, ou qui contiennent un ou plusieurs modèles.
PetScan parcourt tout le contenu des pages, mais n’assure pas que l’information se trouve au bon endroit. La présence d’un modèle {{familier}} par exemple, pourra être en fait dans une autre section de langue, ou même comme indication dans une section de synonyme. Il peut donc y avoir de nombreux faux positifs.
L’outil est très demandé, et il est souvent indisponible.
Au sein de l’écosystème wikimédien, il n’existe pour l’instant aucun outil pour faire des requêtes SPARQL sur le contenu du Wiktionnaire. Il est possible de faire des requêtes sur le contenu de Wikidata, mais pas sur le contenu du Wiktionnaire. Deux projets extérieurs visent à permettre de le faire : Dbnary et le Dictionnaire des francophones. Pour les requêtes sur des données lexicales dans Wikidata, voir Projet:Coopération/Wikidata.
Dbnary est le projet d’un chercheur français qui parse une vingtaine d’éditions du Wiktionnaire pour les mettre dans une base structurée. Un endpoint SPARQL est ouvert au public, utilisant Virtuoso : http://kaiko.getalp.org/sparql . Il permet notamment de faire des requêtes sur les sections de traductions et les relations sémantiques (synonymes, antonymes, etc.).
Les données du Wiktionnaire étant parsées par l’outil, il offre le plus de possibilités, à condition de réussir à formaliser de bonnes requêtes. Quelques-unes sont proposées sur le site, mais si vous imaginez d’autres requêtes SPARQL qui vous intéresseraient, n’hésitez pas à les lister ci-dessous.
Je note des requêtes SPARQL qui me sembleraient utiles et que je sais rédiger (la plupart grâce à VIGNERON, encore merci !). Toutes ne sont pas possibles dans Dbnary, mais le seraient dans une base RDF qui parserait plus finement le Wiktionnaire.
Le Dictionnaire des francophones (DDF) est un projet initié par le ministère de la Culture de France et réalisé à Lyon. Le chef de projet est Noé et il a été lancé le 16 mars 2021. Il intègre plusieurs dictionnaires et bases de mots dont le Wiktionnaire. Deux autres sont sous licence CC BY-SA et accessibles dans le endpoint public, les autres ne sont pas accessibles. Il s’agit de l’Inventaire des particularités lexicales du français en Afrique noire et du Dictionnaire des synonymes, des mots et expressions des français parlés dans le monde. Au lancement, c’est le dump du 1e mars 2021 qui est intégré et il sera mis à jour régulièrement.
#Nombre d’entrées et de définitions du Wiktionnaire dans le Dictionnaire des francophones (sans les flexions).
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT (COUNT(DISTINCT ?lentry) AS ?nombre_de_mots) (COUNT(DISTINCT ?definition) AS ?nombre_de_definitions)
WHERE {
?entry a lexicog:Entry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?entry lexicog:describes ?lentry .
?lentry ontolex:sense ?definition .
MINUS {?lentry a ddf:VerbalInflection.}
MINUS {?lentry a ddf:Inflection.}
}
#Mots avec classe et définition, contenant "Type de".
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?mot ?classe ?def ?loc
WHERE {
?entry a lexicog:Entry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?entry lexicog:describes ?lentry .
?lentry ontolex:canonicalForm/ontolex:writtenRep ?mot .
?lentry ddf:hasPartOfSpeech/skos:prefLabel ?classe .
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
FILTER ( regex(?def, "Type de") )
OPTIONAL{ ?sense ddf:hasLocalisation/skos:prefLabel ?loc. }
}
LIMIT 200
#Définitions ne contenant aucun lien.
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?mot ?classe ?locution ?def ?loc
WHERE {
?entry a lexicog:Entry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?entry lexicog:describes ?lentry .
?lentry ontolex:canonicalForm/ontolex:writtenRep ?mot .
OPTIONAL{?lentry ddf:hasPartOfSpeech/skos:prefLabel ?classe .}
OPTIONAL{?lentry ddf:multiWordType/skos:prefLabel ?locution .}
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
OPTIONAL { ?sense ddf:hasLocalisation/skos:prefLabel ?loc }
FILTER ( REGEX (?def, "^((?!href).)*$") )
}
ORDER BY DESC(?mot)
LIMIT 200
#Sélection issue d’un glossaire (liste thématique).
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?mot ?def ?loc
WHERE {
?entry a lexicog:Entry .
?entry lexicog:describes ?lentry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?lentry ontolex:canonicalForm/ontolex:writtenRep ?mot .
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
?sense ddf:hasGlossary <http://data.dictionnairedesfrancophones.org/authority/glossary/fruits> .
OPTIONAL{?sense ddf:hasLocalisation/skos:prefLabel ?loc.}
}
ORDER BY ?mot
#Exemples qui ne soient pas un modèle d’ébauche et qui ne contiennent pas de gras.
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?mot ?classe ?locution ?def ?exemple
WHERE {
?entry a lexicog:Entry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?entry lexicog:describes ?lentry .
?lentry ontolex:canonicalForm/ontolex:writtenRep ?mot .
OPTIONAL{?lentry ddf:hasPartOfSpeech/skos:prefLabel ?classe .}
OPTIONAL{?lentry ddf:multiWordType/skos:prefLabel ?locution .}
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
?sense lexicog:usageExample/rdf:value ?exemple .
FILTER ( REGEX (?exemple, "^((?!Exemple d'utilisation manquant).)*$") )
FILTER ( REGEX (?exemple, "^((?!définition manquante ou incomplète ou mal formée).)*$") )
FILTER ( REGEX (?exemple, "^((?!<br).)*$") )
FILTER ( REGEX (?exemple, "^((?!<b>).)*$") )
}
ORDER BY DESC(?mot)
LIMIT 200
#Définitions vraiment longues.
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?mot ?classe ?def ?loc
WHERE {
?entry a lexicog:Entry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?entry lexicog:describes ?lentry .
?lentry ontolex:canonicalForm/ontolex:writtenRep ?mot .
OPTIONAL{?lentry ddf:hasPartOfSpeech|ddf:multiWordType ?classeid .
?classeid skos:prefLabel ?classe .}
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
OPTIONAL { ?sense ddf:hasLocalisation/skos:prefLabel ?loc }
FILTER ( strlen(?def) > 700 )
}
ORDER BY DESC(?mot)
LIMIT 200
#Définitions du Togo avec les informations disponibles.
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?mot ?classe ?def ?exemple ?source ?domaine ?registre ?diachronique ?frequence ?connotation ?prononciation
WHERE {
?entry a lexicog:Entry .
?entry lexicog:describes ?lentry .
?lentry ontolex:canonicalForm/ontolex:writtenRep ?mot .
OPTIONAL {?lentry ontolex:canonicalForm/ontolex:phoneticRep ?prononciation .}
OPTIONAL{?lentry ddf:hasPartOfSpeech|ddf:multiWordType ?classeid .
?classeid skos:prefLabel ?classe .}
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
OPTIONAL{?sense lexicog:usageExample/rdf:value ?exemple .}
OPTIONAL{?sense ddf:hasRegister/skos:prefLabel ?registre .}
OPTIONAL{?sense ddf:hasDomain/skos:prefLabel ?domaine .}
OPTIONAL{?sense ddf:hasTemporality/skos:prefLabel ?diachronique .}
OPTIONAL{?sense ddf:hasFrequency/skos:prefLabel ?frequence .}
OPTIONAL{?sense ddf:hasConnotation/skos:prefLabel ?connotation .}
?sense ddf:hasLocalisation <https://www.geonames.org/2363686>.
?entry ddf:hasLexicographicResource/skos:prefLabel ?source .
}
ORDER BY (?mot)
#Exemples écrit par Paul Vibert.
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <https://www.w3.org/ns/prov#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?mot ?def ?exemple ?source
WHERE {
?entry a lexicog:Entry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?entry lexicog:describes ?lentry .
?lentry ontolex:canonicalForm/ontolex:writtenRep ?mot .
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
?sense lexicog:usageExample ?exe .
?exe rdf:value ?exemple .
?exe dct:bibliographicalCitation ?source.
FILTER ( regex(?source, "Paul Vibert") )
}
ORDER BY DESC(?mot)
LIMIT 200
Pour n’avoir les définitions qui n’ont qu’une seule indication de lieu, sans aucune définition présentant plus d'un lieu, remplacer la ligne pour obtenir le lieu par :
{SELECT DISTINCT ?sense WHERE {
VALUES ?lieu {<https://www.geonames.org/3381670>}
?sense ddf:hasLocalisation ?lieu .
FILTER NOT EXISTS { ?sense ddf:hasLocalisation ?seulement . FILTER(?seulement != ?lieu) }
}}
Pour obtenir la liste des lieux avec leurs identifiants Geonames :
#Liste des indications géographiques disponibles.
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX core: <http://www.w3.org/2004/02/skos/core#>
PREFIX prov: <http://www.w3.org/ns/prov-o-20130430#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX lemon: <http://lemon-model.net/lemon#>
PREFIX lexicog: <http://www.w3.org/ns/lemon/lexicog#>
PREFIX lexinfo: <http://www.lexinfo.net/ontology/2.0/lexinfo#>
PREFIX ontolex: <http://www.w3.org/ns/lemon/ontolex#>
PREFIX ddf: <http://data.dictionnairedesfrancophones.org/ontology/ddf#>
PREFIX dinv: <http://data.dictionnairedesfrancophones.org/dict/inv/entry/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?loc ?lieu (COUNT(DISTINCT ?def) AS ?compte)
WHERE {
?entry a lexicog:Entry .
?entry ddf:hasLexicographicResource <http://data.dictionnairedesfrancophones.org/resource/wiktionnaire> .
?entry lexicog:describes ?lentry .
?lentry ontolex:sense ?sense .
?sense skos:definition ?def .
?sense ddf:hasLocalisation ?lieu.
?lieu skos:prefLabel ?loc.
}
GROUP BY ?lieu ?loc
ORDER BY DESC (?compte)
?sense ddf:hasLocalisation ?lieu.
?sense ddf:hasDomain ?lieu.
Les noms des variables peuvent être ajustées, mais ça fonctionnera déjà comme ça !
Quarry est un outil permettant d’exécuter des requêtes SQL sur les bases de données des projets de l’écosystème wikimédien. Il est accessible en suivant ce lien.
Avec les outils de programmation des bots, il est possible d’écrire rapidement de petits algorithmes pour détecter des erreurs dans les pages du Wiktionnaire.
|source=
non utilisé (tirets et parenthèses ajoutés manuellement), ou année manquante dans la source#* ''
, à remplacer par #* {{exemple|lang=fr}}
Actions pour des bots :
Il est facile de télécharger les dumps du Wiktionnaire (faits au moins une fois par mois) et de travailler sur son ordinateur. Ils sont téléchargeables ici (prendre frwiktionary-latest-pages-articles.xml.bz2 puis le décompresser).
Une fois la librairie installée, quelques lignes suffisent pour récupérer la liste des pages en français.
Par exemple en Perl avec MediaWiki::Bot :
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) {
if ($texte =~ /\{\{langue\|fr\}\}/m) {
print $titre, "\n";
}
}
En général, on ne traite qu’une seule langue à la fois, la fonction suivante récupère le contenu de la section dans la langue choisie :
# Fonction qui retourne le texte de la section dans la langue demandée ;
# paramètres : page, 'fr' (où 'fr' peut être n'importe quelle langue, comme 'it')
sub section_langue {
my ($page, $code_langue) = @_;
# tableau des lignes de la langue demandée
my @lignes_langue = ();
# code langue de la ligne courante
my $langue = '';
for my $ligne (split /\n/, $page) {
# test section de langue
if ($ligne =~ /^\s*==\s*\{\{\s*langue\s*\|\s*(\w*)/) {
# changement de langue
$langue = $1;
next;
}
if ($langue eq $code_langue) {
push @lignes_langue, $ligne;
}
}
return @lignes_langue;
}
my $pages = MediaWiki::DumpFile::FastPages->new('frwiktionary-latest-pages-articles.xml');
my $titre;
my $texte;
while (($titre, $texte) = $pages->next) {
# exclusion des pages du Wiktionnaire
next if ($titre =~ /^Wiktionnaire:/);
# exclusion des pages sans section française
next if (not ($texte =~ /\{\{langue\|fr\}\}/m));
my @francais = section_langue($texte, 'fr');
# y plus qu’à
}