Utilisateur:PamputtBot/enlever bandeau creation automatique.cpp
Ce programme fait suite à cree par PiedBot.cpp puisqu’il permet de générer une liste des articles qui ont un bandeau {{vérifier création automatique}} alors qu’un humain est repassé sur l’article depuis l’apposition du modèle.
Ce code c++ lit ligne par ligne le dump d’historique complet du Wiktionnaire que l’on a précédemment récupéré ici et décompressé dans le dossier de enlever_bandeau_creation_automatique.cpp. On compile le programme avec la commande suivante
- g++ enlever_bandeau_creation_automatique.cpp -o enlever_bandeau.exe
puis on l’exécute en tapant ./enlever_bandeau.exe Le programme crée un fichier bandeau_a_enlever.txt qui contient une liste de tous les articles créés par Utilisateur:PiedBot, qui ont un bandeau {{vérifier création automatique}} et qui ont été modifiés par un humain depuis.
On retire ensuite le bandeau des pages concernées en utilisant, en principe, la commande suivante
- python core/pwb.py core/scripts/replace.py -regex "\{\{vérifier création automatique.*\}\}\n" "" -file:bandeau_a_enlever.txt -summary:"Retrait de {{vérifier création automatique}}"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
bool verif_bot(vector <string> contributeur) {
//renvoie "vrai" si aucun humain n'a touche a l'article
for(unsigned int i=0 ; i<contributeur.size() ; i++) {
if(contributeur[i].find("bot")==string::npos &&
contributeur[i].find("Bot")==string::npos &&
contributeur[i].find("Interwicket")==string::npos) { //on n'a pas trouvé le mot "bot"
return false;
}
}
return true; // aucun humain n'a édité l'article
}
bool estPiedBot(vector <string> contributeur) {
if(contributeur.size()==0) // aucun contributeur (utile pour le premier passage)
return false;
if(contributeur[0].find("PiedBot")!=string::npos) // le premier contributeur est PiedBot
return true;
return false;
}
int main(int argc, char **argv) {
ifstream infile("frwiktionary-latest-pages-meta-history.xml",ifstream::in);
if(!infile) {
cout << "Pas de fichier d’historique" << endl
<< "Telecharger le à https://dumps.wikimedia.org/frwiktionary/latest/frwiktionary-latest-pages-meta-history.xml.7z" << endl;
return 0;
}
ofstream out("bandeau_a_enlever.txt",ofstream::out);
if(!out) {
cout << "Probleme avec le fichier de sortie" << endl;
return 0;
}
string titre, titre_prec;
vector <string> contributeur;
bool creation_auto = false;
string line;
size_t pos1, pos2;
unsigned int cmpt = 0;
while(getline(infile,line)) {
if(line.find("<title>")!=string::npos) {
// on extrait le titre des balises <title>
pos1 = line.find("<title>");
pos2 = line.find("</title>");
titre= line.substr(pos1+7,pos2-pos1-7);
if(titre!=titre_prec) {
// on change de titre
if(estPiedBot(contributeur) && !verif_bot(contributeur) && creation_auto) { // le premier contributeur est PiedBot et
// un humain a edite l'article et
// {{vérifier création automatique}} est présent
// cout << titre_prec << endl;
out << titre_prec << endl;
cmpt++;
}
contributeur.clear();
titre_prec = titre;
creation_auto = false;
}
}
// on recupere le nom du contributeur
if(line.find("<username>")!=string::npos) {
pos1 = line.find("<username>");
pos2 = line.find("</username>");
line = line.substr(pos1+10,pos2-pos1-10);
contributeur.push_back(line);
// on le remet a false de sorte que la derniere modification de l'article contienne {{vérifier création automatique}}
// le flag sera true uniquement si la dernière modification de l'article contient {{vérifier création automatique}}
creation_auto = false;
}
// ou l’IP qui a servi a contribué
if(line.find("<ip>")!=string::npos) {
pos1 = line.find("<ip>");
pos2 = line.find("</ip>");
line = line.substr(pos1+4,pos2-pos1-4);
contributeur.push_back(line);
// on le remet a false de sorte que la derniere modification de l'article contienne {{vérifier création automatique}}
// le flag sera true uniquement si la dernière modification de l'article contient {{vérifier création automatique}}
creation_auto = false;
}
// on regarde si le modèle « vérifier création automatique » est présent
if(line.find("{{vérifier création automatique")!=string::npos)
creation_auto=true;
}
infile.close();
out.close();
cout << cmpt << " articles trouves" << endl;
return 1;
}